Linux 启动过程综述
一. Bootloader
二.Kernel 引导入口
三.核心数据结构初始化--内核引导第一部分
四.外设初始化--内核引导第二部分
五.init 进程和 inittab 引导指令
六.rc 启动脚本
七.getty 和 login
八.bash
附:XDM 方式登录
作者:杨沙洲
本文以 Redhat 6.0 Linux 2.2.19 for Alpha/AXP 为平台,描述了从开机到登录的 Linux 启动全过
程。该文对 i386 平台同样适用。
一. Bootloader
在 Alpha/AXP 平台上引导 Linux 通常有两种方法,一种是由 MILO 及其他类似的引导程序引 导,
另一种是由 Firmware 直接引导。MILO 功能与 i386 平台的 LILO 相近,但内置有基本的磁盘 驱
动程序(如 IDE、SCSI 等),以及常见的文件系统驱动程序(如 ext2,iso9660 等), firmware
有 ARC、SRM 两种形式,ARC 具有类 BIOS 界面,甚至还有多重引导的设置;而 SRM 则具 有
功能强大的命令行界面,用户可以在控制台上使用 boot 等命令引导系统。ARC 有分区
(Partition)的概念,因此可以访问到分区的首扇区;而 SRM 只能将控制转给磁盘的首扇区。
两种 firmware 都可以通过引导 MILO 来引导 Linux,也可以直接引导 Linux 的引导代码。
“arch/alpha/boot”下就是制作 Linux Bootloader 的文件。“head.S”文件提供了对 OSF PAL/1 的
调用入口,它将被编译后置于引导扇区(ARC 的分区首扇区或 SRM 的磁盘 0 扇区), 得到
控制后初始化一些数据结构,再将控制转给“main.c”中的 start_kernel(), start_kernel()向控
制台输出一些提示,调用 pal_init()初始化 PAL 代码,调用 openboot() 打开引导设备(通过
读取 Firmware 环 境 ), 调 用 load() 将 核 心 代 码 加 载 到 START_ADDR (见
“include/asm-alpha/system.h”),再将 Firmware 中的核心引导参数加载到 ZERO_PAGE(0) 中,
最后调用 runkernel()将控制转给 0x100000 的 kernel,bootloader 部分结束。
“arch/alpha/boot/bootp.c”以“main.c”为基础,可代替“main.c”与“head.S” 生成用于 BOOTP 协
议网络引导的 Bootloader。
Bootloader 中使用的所有“srm_”函数在“arch/alpha/lib/”中定义。
以上这种 Boot 方式是一种最简单的方式,即不需其他工具就能引导 Kernel,前提是按照
Makefile 的指导,生成 bootimage 文件,内含以上提到的 bootloader 以及 vmlinux,然后将
bootimage 写入自磁盘引导扇区始的位置中。
评论0
最新资源