一、 Linux的启动流程分析
1. 启动流程:
1. 加载 BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置;
2. 读取并运行第一个启动装置内 MBR 的 boot Loader (亦即是 grub, spfdisk 等程序);
3. 依据 boot loader 的配置加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序;
4. 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯;
5. init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行的作业环境 (如网络、时区等);
6. init 运行 run-level 的各个服务之启动 (script 方式);
7. init 运行 /etc/rc.d/rc.local 文件;
8. init 运行终端机模拟程序 mingetty 来启动 login 程序,最后就等待使用者登陆啦;
2. BIOS, boot loader 与 kernel 加载
(1) BIOS, 开机自我测试与 MBR
个人计算机架构下,你想要启动整个系统首先就得要让系统去加载 BIOS (Basic Input Output System),并通过 BIOS 程序去加载 CMOS 的资讯,并且通过 CMOS 内的配置值取得主机的各项硬件配置。
(2) Boot Loader 的功能
• 提供菜单:使用者可以选择不同的启动项目,这也是多重启动的重要功能!
• 加载核心文件:直接指向可启动的程序区段来开始操作系统;
• 转交其他 loader:将启动管理功能转交给其他 loader 负责。
§ 加载核心侦测硬件与 initrd 的功能
(3) 虚拟文件系统 (Initial RAM Disk) 一般使用的档名为 /boot/initrd。
3. 第一个进程 init 及配置档 /etc/inittab 与 runlevel
(1)Run level:运行等级
• 0 - halt (系统直接关机)
• 1 - single user mode (单人维护模式,用在系统出问题时的维护)
• 2 - Multi-user, without NFS (类似底下的 runlevel 3,但无 NFS 服务)
• 3 - Full multi-user mode (完整含有网络功能的纯文字模式)
• 4 - unused (系统保留功能)
• 5 - X11 (与 runlevel 3 类似,但加载使用 X Window)
• 6 - reboot (重新启动)
(2)§ init 的处理流程
事实上 /etc/inittab 的配置也有点类似 shell script 啦,因为该文件内容的配置也是一行一行的从上往下处理的, 因此我们可以知道 CentOS 的 init 依据 inittab 配置的处理流程会是:
1. 先取得 runlevel 亦即默认运行等级的相关等级 (以鸟哥的测试机为例,为 5 号);
2. 使用 /etc/rc.d/rc.sysinit 进行系统初始化
3. 由於 runlevel 是 5 ,因此只进行『l5:5:wait:/etc/rc.d/rc 5』,其他行则略过
4. 配置好 [ctrl]+[alt]+[del] 这组的组合键功能
5. 配置不断电系统的 pf, pr 两种机制;
6. 启动 mingetty 的六个终端机 (tty1 ~ tty6)
7. 最终以 /etc/X11/perfdm -nodaemon 启动图形介面啦!
4. init 处理系统初始化流程 (/etc/rc.d/rc.sysinit)
开始加载各项系统服务之前,得先做好整个系统环境,我主要利用 /etc/rc.d/rc.sysinit 这个 shell script 来配置好我的系统环境的
1. 取得网络环境与主机类型: