`

Linux的系统启动流程,boot loader,init

 
阅读更多

系统启动流程

以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

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 用户自定义系统启动脚本

 

 

分享到:
评论

相关推荐

    Linux系统启动过程

    (2) 读取第一个开机装置的MBR的boot Loader(grub)开机信息 (3) 加载Kernel操作系统核心信息,Kernel开始解压缩,并且尝试驱动所有硬件装置 (4) Kernel执行init程序并取得run-level信息 (5) Init执行/etc/rc....

    简要分析linux系统的启动过程

    接触linux系统运维已经好几年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程: 一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可以简单总结为以下几步: 1)...

    深入分析Linux内核源码

    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 从何处开始阅读源代码 ...

    windows上可编译Linux内核

    代码是加在Linux-0.11-With-PE-Loader\boot目录下的setup.asm文件里,里面有详细的注释. 5.对tools下的build.c作了修改,使其能生成可引导的1.44M的软盘镜像文件Boot.img 6.在Link的过程中,init目录下的main.c会...

    switch_linux_kit:使用Docker工具链构建u-boot,coreboot,shofel2,imx_usb_loader和linux内核的套件

    git submodule update --init 编译中 注意:您仍然需要自己获取coreboot/tegra_mtc.bin 。 docker run -ti --rm -v$(pwd):/source nold360/switch_linux_toolchain bash 00_build.sh 利润! 注意:您还需要准备一...

    uboott移植实验手册及技术文档

    关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD_NAND) typedef enum { NFCE_...

    初识centos7与centos6的区别整理(内核、命令等)

    Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程。这个进程是系统的第一个进程。它负责产生其他所有...

    windows下可编译linux 用insight+bochs源码级调试

    代码是加在Linux-0.11-With-PE-Loader\boot目录下的setup.asm文件里,里面有详细的注释. 5.对tools下的build.c作了修改,使其能生成可引导的1.44M的软盘镜像文件Boot.img 6.在Link的过程中,init目录下的main.c会...

    Linux-0.11 [内核源代码带中文注释]

    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 ...

    自己动手写操作系统(含源代码).part2

    对于操作系统技术感兴趣,想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者,都可以在本书中得到实践中所需的知识和思路。  本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关...

    自己动手写操作系统(含源代码).part1

    对于操作系统技术感兴趣,想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者,都可以在本书中得到实践中所需的知识和思路。  本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关...

    万能启动u盘制作工具 FbinstTool v1.6

    * 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 ...

    AT91SAM9263开发板SBC6300X.rar

    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信元! 点评 回复 支持 反对 ...

    mini2440之U-boot移植详细手册-20100419

    1.2 在嵌入式LINUX中B OOT LOADER 的必要性............................................................................................................. 4 1.3 BOOT LOADER的功能和选择 ....................

    grub4dos-V0.4.6a-2017-02-04更新

    4.usb2.0 驱动通过菜单或命令行,使用 usb --init 加载。 5.usb2.0 驱动增加了对集线器(HUB)的支持。若加载失败,可重启试一试。 6.读多扇区失败时,会给出提示:拔出 u 盘然后再插入,按任意键继续。此时会...

Global site tag (gtag.js) - Google Analytics