系统启动流程
以debian6为例
1 加载BIOS的硬件信息与进行自我测试,并取得启动设备(如硬盘、光盘、闪存)
2 读取并执行启动设备内MBR的boot loader(如grub等)
3 依据boot loader的设定加载kernel,kernel开始侦测硬件并加在驱动程序
4 硬件驱动成功后,kernel会主动呼叫init程序,而init会取得run-level信息
5 init执行/etc/init.d/rc脚本来准备软件执行的工作环境(如网络、时区等)
6 init执行run-level的各个服务之启动(scipt方式)
7 init执行/etc/rc.d/rc.local文件
8 init执行终端机启动login程序,等待用户登录
boot loader
1 每个硬盘的MBR只有一个
2 每个文件系统(filesystem,或者是partition)都会保留一块启动扇区(boot sector)
3 每个操作系统默认会安装boot loader到他自己的文件系统的boot sector中
4 boot loader可以安装在MBR中,boot loader也可以安装在boot sector中
5 boot loader可以将管理权转交给其他的boot loader
init初始程序及其配置文件/etc/inittab
/sbin/init最主要的功能就是准备软件执行的环境,包括系统主机名、网络设定、语系处理、文件系统格式即其他服务的启动
/etc/inittab是/sbin/init的配置文件,此配置文件类似script,需要一步一步执行
init处理流程,也就是/etc/inittab执行步骤
1 | 设置默认的runlevel | id:2:initdefault: |
2 | 系统启动初始化脚本 | si::sysinit:/etc/init.d/rcS |
3 | 运行runlevel为2的脚本 | l2:2:wait:/etc/init.d/rc 2 |
4 | 设置ctrl+alt+del组合进行重启 | ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now |
5 | 设置电源管理 | pf::powerwait:/etc/init.d/powerfail start |
6 | 启动终端tty1 | 1:2345:respawn:/sbin/getty 38400 tty1 |
步骤详细分析
1 上表第2步调用rsS其实是调用/etc/init.d/rc S,
上表第3步也是同样调用/etc/init.d/rc 2
2 查看/etc/init.d/rc脚本,此脚本根据参数runlevel调用相应runlevel的脚本
相应runlevel的脚本的路径为/etc/rc$runlevel.d/
3 /etc/rc$runlevel.d/路径下脚本被依次执行,启动或关闭相应的服务
/etc/rc$runlevel.d/S* 需要开启的服务
/etc/rc$runlevel.d/K* 需要关闭的服务
4 /etc/init.d/rc.local脚本在/etc/rc$runlevel.d/路径下最后执行
/etc/init.d/rc.local脚本为用户自定义系统启动脚本
/etc/inittab主要语法
/etc/inittab由:(冒号)来分隔成4部分
1 id。最多4个字符,代表init的主要工作,只是简单说明
2 runlevel。代表该初始化动作在哪些runlevel下运行
3 action。代表初始化的特别动作
4 process。代表需要进行的命令,通常是一些script
更详细的可参考man inittab
action初始化特别动作
initdefault | 代表预设的runlevel设定值 |
sysinit | 代表系统初始化的动作 |
ctrlaltdel | 代表按下这3个按键是否可以重启 |
wait | 代表后面的process命令必须执行完毕才能继续 |
respawn |
代表后面的process命令可以无限制的再生。 例如getty启动login,注销后,此动作还会启动login |
runlevel执行等级
runlevel作用就是规定系统使用不同的服务来启动,根据目的设置相应的工作环境
不同版本的linux还需要查看/etc/inittab
0 | halt | 系统直接关机 |
1 | single-user | 单人维护模式,用在系统出问题时的维护 |
2 | multi-user without NFS | 多用户文本模式,无NFS服务 |
3 | full multi-user | 完整含有网络功能的多用户纯文本模式 |
4 | unused | 系统保留 |
5 | X11 | 多用户图形界面,加载使用X Window |
6 | reboot | 重启 |
相关文件
/boot/vmlinuz-$(uname -r) | linux核心文件 |
/boot/initrd-$(uname -r) | 启动时虚拟文件系统 |
/boot/grub/* | boot loader程序 |
/etc/inittab | init配置文件 |
/etc/init.d/rc | 初始化系统启动脚本 |
/etc/rc$runlevel.d/* | 相应runlevel系统启动脚本 |
/etc/init.d/rc.local | 用户自定义系统启动脚本 |
相关推荐
(2) 读取第一个开机装置的MBR的boot Loader(grub)开机信息 (3) 加载Kernel操作系统核心信息,Kernel开始解压缩,并且尝试驱动所有硬件装置 (4) Kernel执行init程序并取得run-level信息 (5) Init执行/etc/rc....
接触linux系统运维已经好几年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程: 一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可以简单总结为以下几步: 1)...
1.5.1 Linux内核在整个操系统中的位置 1.5.2 Linux内核的作用 1.5.3 Linux内核的抽象结构 1.6 Linux内核源代码 1.6.1 多版本的内核源代码 1.6.2 Linux内核源代码的结构 1.6.3 从何处开始阅读源代码 ...
代码是加在Linux-0.11-With-PE-Loader\boot目录下的setup.asm文件里,里面有详细的注释. 5.对tools下的build.c作了修改,使其能生成可引导的1.44M的软盘镜像文件Boot.img 6.在Link的过程中,init目录下的main.c会...
git submodule update --init 编译中 注意:您仍然需要自己获取coreboot/tegra_mtc.bin 。 docker run -ti --rm -v$(pwd):/source nold360/switch_linux_toolchain bash 00_build.sh 利润! 注意:您还需要准备一...
关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD_NAND) typedef enum { NFCE_...
Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程。这个进程是系统的第一个进程。它负责产生其他所有...
代码是加在Linux-0.11-With-PE-Loader\boot目录下的setup.asm文件里,里面有详细的注释. 5.对tools下的build.c作了修改,使其能生成可引导的1.44M的软盘镜像文件Boot.img 6.在Link的过程中,init目录下的main.c会...
The loader has been made as simple as possible, and continuos ! read errors will result in a unbreakable loop. Reboot by hand. It ! loads pretty fast by getting whole sectors at a time whenever ...
对于操作系统技术感兴趣,想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者,都可以在本书中得到实践中所需的知识和思路。 本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关...
对于操作系统技术感兴趣,想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者,都可以在本书中得到实践中所需的知识和思路。 本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关...
* display error message "fb mbr not initialized" when the device has not been formatted using fbinst, and "fb mbr corrupted" when mbr is overwritten by other boot loader. In the later case, you can ...
Cat,chmod,discard,echo,flashwrite,flashfsd,free,genhtml,init,kill,loader,Ls,mkdir,mount,ps,reboot,rm,smanaged,sysconf,yes,insmod,lsmod,rmmod 《ADI参考电路》限时下载!奖励300信元! 点评 回复 支持 反对 ...
1.2 在嵌入式LINUX中B OOT LOADER 的必要性............................................................................................................. 4 1.3 BOOT LOADER的功能和选择 ....................
4.usb2.0 驱动通过菜单或命令行,使用 usb --init 加载。 5.usb2.0 驱动增加了对集线器(HUB)的支持。若加载失败,可重启试一试。 6.读多扇区失败时,会给出提示:拔出 u 盘然后再插入,按任意键继续。此时会...