### Linux启动过程详解 #### 一、Bootloader与引导机制 Linux系统的启动是一个复杂而精细的过程,本章节将深入探讨Linux系统从开机到用户登录这一过程中Bootloader的关键作用及其内部工作机制。 **1.1 Bootloader概述** Bootloader是计算机启动过程中最先运行的软件之一,它的主要任务是初始化硬件设备、建立内存空间的映射图,然后将操作系统内核和其它系统软件从一个永久存储设备复制到RAM中,最后将系统控制权交给内核。 **1.2 Alpha/AXP平台上的Bootloader** 在Alpha/AXP平台上,Linux的引导通常有两种方法: - **通过MILO引导:** - MILO是一个类似于i386平台上的LILO的引导程序,内置有基本的磁盘驱动程序(例如IDE、SCSI)以及常见的文件系统驱动程序(如ext2, iso9660等)。 - 使用MILO引导Linux时,不需要额外的Bootloader,只需要vmlinux或vmlinux.gz即可。 - **通过Firmware引导:** - Firmware有ARC和SRM两种形式。 - ARC具备类似BIOS的界面,支持多重引导设置。 - SRM提供功能强大的命令行界面,用户可以通过命令行引导系统。 - 无论是ARC还是SRM,都可以通过引导MILO来间接引导Linux,也可以直接引导Linux的引导代码。 **1.3 Bootloader实现细节** 在“arch/alpha/boot”目录下,包含了用于制作Linux Bootloader的文件。其中,“head.S”文件提供了对OSF PAL/1的调用入口,负责初始化数据结构,并将控制权传递给“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部分结束。 所有在Bootloader中使用的“srm_”函数都在“arch/alpha/lib/”中定义。 #### 二、I386平台上的引导过程 **2.1 BIOS引导** 对于i386平台,BIOS承担着最初的引导工作,即将四个主分区表中的第一个可引导分区的第一个扇区加载到实模式地址0x7c00上,然后将控制权转交给它。 **2.2 bootsect.S的作用** 在“arch/i386/boot”目录下,“bootsect.S”是生成引导扇区的汇编源码。它首先将自己拷贝到0x90000上,然后将紧随其后的setup部分(位于第二扇区)拷贝到0x90200,并将真正的内核代码拷贝到0x100000。 这些拷贝操作的前提是,bzImage文件或zImage文件必须按照`bootsect`, `setup`, `vmlinux`这样的顺序组织,并且连续存放于始于引导分区的首扇区的连续磁盘扇区中。 完成加载动作后,`bootsect.S`直接跳转到0x90200,这里是`setup.S`的程序入口。 **2.3 setup.S的功能** `setup.S`的主要功能包括: - 将系统参数(包括内存、磁盘等)拷贝到0x90000-0x901FF内存中,这部分区域将被系统参数覆盖。 - 包含`video.S`中的代码来检测和设置显示器和显示模式。 - `setup.S`将系统转换到保护模式,并跳转到0x100000(对于bzImage格式的大内核)或0x1000(对于zImage格式的小内核)的内核引导代码,Bootloader过程结束。 #### 三、Kernel引导入口 对于I386平台,由于i386本身的问题,在“arch/i386/kernel/head.S”中需要进行更多的设置,但最终也是通过调用`SYMBOL_NAME(start_kernel)`转到`start_kernel()`函数中执行。 在i386系统中,如果内核是以bzImage的形式压缩(即大内核方式),那么就需要预先处理`bootsect.S`和`setup.S`之间的关系,以确保内核能够正确地加载和初始化。 通过以上的介绍可以看出,Linux的启动过程涉及多个环节,包括硬件初始化、Bootloader的选择与配置、内核的加载与初始化等。这一系列步骤共同构成了Linux从开机到登录的整个启动流程,为用户提供了一个稳定可靠的操作系统环境。
剩余7页未读,继续阅读
- 粉丝: 1
- 资源: 18
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助