Linux启动流程介绍
一. 内核镜像Izmage被bootloader装载到内存中。zImage的入口代码是自引导程序。包含一些初始化代码。第一条指令在head.S文件中。解压内核,然后调用call_kernel启动vmlinux(解压后在正确位置上的内核)
二. vmlinux开始部分的代码对应的文件也叫head.S.这个是体系结构相关的代码,进行页表的初级初始化后打开MMU,跳转到start_kernel函数中去。
三. start_kernel负责初始化内核的各个子系统,然后调用rest_init().
四.reset_init 调用kernel_thread启动init内核线程,执行init函数,init函数负责挂载跟文件系统,初始化设备驱动程序,启动用户空间的init进程。这些工作是内核中最重要的过程
五. 用户空间init进程执行,init程序在根文件系统的/sbin下,负责启动一系列程序与脚本文件。init进程是所有的进程的发起着与控制者。init进程有两种启动方式:
1.system V启动流程,这是一般桌面版Linux的启动方式,如Ubuntu。
(1).执行的地一个脚本是/etc/rc.d/rc.sysinit,包含如下内容:检查磁盘,挂在其他的文件系统等
(2).执行缺醒的运行级别,这个在/etc/inittab中确定
(3).执行/etc/rc.c/rc.local脚本文件,用户可以在这个文件中添加启动后需要执行的命令
(4).执行/bin/login程序,提示用户输入用户名与密码,如果吻合则初始化环境,并将控制权转交shell
2.busybox 启动流程,这是嵌入式系统的启动流程,init程序在/sbin下面,这个是一个符号链接,链接到/bin/busybox上
(1).为init进程设置信号处理程序
(2).对控制台进行初始化(串口终端)
(3).解析/etc/inittab文件
(4).运行/etc/init.d/rcS脚本,这个脚本设置一些环境变量,运行启动时的程序