原文地址:http://blog.chinaunix.net/u/22418/showart_1356101.html
在 Intel i386 体系结构下,不同发行版本的 Linux 的启动过程有很多相似之处。
- bios 读取位于第一个扇区(硬盘或光盘的主引导记录,简称 MBR)的 Linux 内核加载器。
- 内核加载器加载内核。新的发行版本使用的大多是 2.6 系列的内核,不过 2.4 系列的内核仍然得到广泛的应用。
- 运行 Init 进程并执行多个脚本。
如果从硬盘启动 Linux,内核加载器(Intel 兼容体系结构)主要使用的是 Lilo 或 Grub。如果从光盘引导 Linux,比如:Live CD 或安装盘,则常选择 Syslinux 作为内核加载器。
在配置文件 /etc/lilo.conf 和 /boot/grub/grub.conf 中你可以设置:
- 内核加载器安装在哪里(主引导记录还是单个分区的引导记录)。
- 指定系统根文件系统(/)所在的分区。
- 内核 image 和 initrd 的路径。
你可以配置启动不同的操作系统(Linux 或是其它的操作系统)和不同版本的内核。
每一个发行版本的 Linux 内核都源自 Linus Torvalds 内核,但是可能会具有不同的版本机制,或由版本的维护者加入的非 Linus 补丁。
你可以重新并编译安装官方的内核代码或不同发行版本的内核源码包。
Unix 系统启动的第一个进程总是 Init 进程,它的配置文件总是 /etc/inittab。分析 /etc/inittab 和所有被它 source 的脚本,你就可以完全地了解系统的启动过程。
Linux/Unix 的主要区别大多是 shell(初始化)脚本的不同。
很多的 Linux 发行版使用 Unix System V 的启动方法。基于 rc 脚本,根据不同的运行级别启动 /etc/init.d/ 下相应的脚本。
RedHat
/etc/rc.d/rc.sysinit
由 init 进程调用,它设置和执行所有的系统初始化函数,并 source /etc/sysconfig/* 目录下的配置文件。
/etc/rc.d/functions
被其它系统脚本使用的通用函数。
/etc/rc.d/*
所有系统服务的启动和关闭脚本。系统启动时根据用户指定的运行级别执行 /etc/rc#runlevel.d/(“#runlevel”为运行级别,一般为 1,3,5)目录下的脚本文件。
注意:/etc/rc#runlevel.d/ 目录下的脚本只是到 /etc/rc.d/ 目录下的脚本的一个链接。
Fedora - 启动过程
Fedora 采用 RedHat 的方式来启动系统。
Boot Loader
Fedora 使用 Grub 作为启动加载器,所有的配置文件和二进制文件都在 /boot/grub/ 目录下,grub.conf 包含所有的配置信息(/boot/grub/menu.lst 和 /etc/grub.conf 都是指向它的链接),/boot/grub/splash.xpm.gz 是 grub 启动时的默认背景图片。
Kernel
主要的二进制文件为 /boot/vmlinuz-version,系统符号(System Map)文件为 /boot/System.map-version,启动时初始化内存的文件为 /boot/initrd-version。当前内核的完整配置文件为 /boot/config-version。
内核模块位于 /lib/modules/version 目录下。
Init
/etc/inittab 有一个规定,mingetty 优先于运行级别 1 启动(所以单用户模式下不需要密码就可以直接使用 root shell)。不论什么运行级别,系统执行的第一个初始化脚本都是 /etc/rc.d/rc.sysinit,然后执行 /etc/rc#runlevel.d 目录下的脚本启动各种系统服务。
系统配置文件大多放在 /etc/sysconfig/ 下,在启动阶段被加载(sourced)。
/etc/rc.d/rc.sysinit 负责各种各样的启动工作,顺序如下
- 根据 /etc/initlog.conf 和 /etc/syslog.conf 的设置,使用 initlog 来记录运行情况。
- 如果使用 DEVFS,就启动 devfsd 服务。
- 设置 hostname,hosttype 并加载(source) /etc/sysconfig/network
- 挂载 procfs 和 sysfs 到 /proc 和 /sys 目录下
- 检查 SeLinux 状态
- 加 载(source) /etc/init.d/functions,该脚本包含被其它脚本用到的通用 shell 函数,包括:daemon(),killproc(),pidofproc(),status(),echo_success()(绿色的 OK),confirm()等等,并加载(source)其它重要的系统配置文件:/etc/sysconfig/i18n, /etc/sysconfig/init 等。
- 设置系统默认字体。
- 打印熟悉的 “Welcome to ...” 标志
- 运行图形化的启动程序 rhgb,更改 /usr/share/rhgb 目录下的图片可以定制启动界面。
- 根据 /etc/sysctl.conf 的设置来配置内核
- 根据 /etc/sysconfig/clock 文件的参数来设置系统时钟
- 根据 /etc/sysconfig/keyboard 的设置来配置键盘布局,改变 /etc/sysconfig/keyboard 文件的设置来定制文本模式下的键盘设定。
- 初始化 ACPI 设定
- 初始化 USB 控制器和 HID 设备
- 查看 /fastboot,/fsckoptions,/forcefsck 和 /.autofsck 文件并加载(source) /etc/sysconfig/autofsck 来决定是否及如何进行文件系统检查。
- 检查磁盘配额
- 根据 /etc/isapnp.conf 初始化 ISA PNP 设备。
- 以读写方式挂载根文件系统
- 如果启用则启动逻辑卷管理(LVM)
- 激活交换空间(swap)
- 使用 /etc/modules.conf 中指定的参数来加载内核模块
- 启动 raid(MD)设备
- 如果存在 /.unconfigured 标志文件,则运行系统第一次启动必须的配置。
- 删除 /,/var/lock,/var/run 目录下的标志文件,删除 rpm 数据库文件(/var/lib/rpm/__db*)和 /tmp 目录下的各种文件。
- 初始化串口,SCSI 磁带,USB 存储器,Firewire
- hdparm 程序根据 /etc/sysconfig/harddisks* 文件的配置开启硬盘优化。
- 如果存在网络配置文件,则激活默认网络配置。
完成上述步骤后,系统进入默认的运行级别并激活 /etc/rc#runlevel.d/ 目录下的服务。
最后,系统将执行 /etc/rc.local 脚本。在这里,用户可以方便地添加希望在系统启动时运行的命令。
没有评论:
发表评论