linux内核启动流程总结.docx

linux内核启动流程总结.docx

ID:52521432

大小:111.18 KB

页数:6页

时间:2020-03-28

linux内核启动流程总结.docx_第1页
linux内核启动流程总结.docx_第2页
linux内核启动流程总结.docx_第3页
linux内核启动流程总结.docx_第4页
linux内核启动流程总结.docx_第5页
资源描述:

《linux内核启动流程总结.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、X86体系结构内核启动分析一、硬件检测当机器加电后它首先执行BIOS(基本输入输出系统)中的代码,BIOS首先执行加电自检程序(POST),当自检通过程便完成了硬件的启动。当自检完成后BIOS按照系统COMS中设置的启动顺序搜寻有效的启动驱动器(这里我们以硬盘为例),并读入系统引导扇区,并将系统控制权交给引导程序。二、加载和执行引导程序系统引导程序主要是把系统内核装载到内存,启动盘必须在第一个逻辑磁道上包含引导记录。这512个字节的扇区又被称作是引导扇区,在系统完成加电自检后,BIOS从启动盘中将引导扇区读入到内存中。一旦

2、引导记录加载完毕,BIOS就交出系统的执行控制权,跳转到引导程序的头部执行。有关linuxpc的引导程序lilo和grub,lilo和grub可以引导多个系统,嵌入式系统上,最常见的bootloader是UBOOT,如果机器上要装多系统的话一般都会用到它们,这一引导程序也储存在引导扇区中或者存放在主引导记录中(MBR),lilo和grub都许允用户自己配置,它们在系统安装时建立了关于系统内核占用磁盘数据块的位置对照表。比如,grub程序就非常强大。Gurb运行后,将初始化设置内核运行所需的环境。然后加载内核镜像。grub磁

3、盘引导全过程:stage1:grub读取磁盘第一个512字节(硬盘的0道0面1扇区,被称为MBR(主引导记录),也称为bootsect)。MBR由一部分bootloader的引导代码、分区表和魔数三部分组成。stage1_5:识别各种不同的文件系统格式。这使得grub识别到文件系统。stage2:加载系统引导菜单(/boot/grub/menu.lst或grub.lst根据grub版本不同文件位置会有所不同),加载内核vmlinuz和RAM磁盘initrd。有时候基本引导装载程序(stage1)不能识别stage2所在的文

4、件系统分区,那么这时候就需要stage1.5来连接stage1和stage2了假设有如下grub配置代码root(hd0,0)//grub分区kernel/vmlinuz‐2.6.35.10‐74.fc14.i686roroot=/dev/ram0//linux分区initrd/initramfs‐2.6.35.10‐74.fc14.i686.img要搞清楚上面两个root的关系,root(hd0,0)中的root是grub命令,它用来指定boot所在的分区作为grub的根目录.而root=/dev/ram0是kernel

5、的参数,它告诉操作系统内核加载完毕之后,真实的文件系统所在的设备.要注意grub的根目录和文件系统的根目录的区别。kernel命令用来指定内核所在的位置,"/"代表(hd0,0),也就是grub的根目录initrd命令用来指定初始化ram的img文件所在位置。三、内核启动内核映像文件vmlinuz:包含有linux内核的静态链接的可执行文件,传统上,vmlinux被称为可引导的内核镜像。vmlinuz是vmlinux的压缩文件。其构成如下:(1)第一个512字节(以前是在arch/i386/boot/bootsect.S)

6、;(2)第二个,一段代码,若干个不多于512字节的段(以前是在arch/i386/boot/setup.S);(3)保护模式下的内核代码(在arch/x86/boot/main.c)。bzImage文件:使用makebzImage命令编译内核源代码,可以得到采用zlib算法压缩的zImage文件,即bigzImage文件。老的zImage解压缩内核到低端内存,bzImage则解压缩内核到高端内存(1M(0x)以上),在保护模式下执行。bzImage文件一般包含有vmlinuz、bootsect.o、setup.o、解压缩程

7、序misc.o、以及其他一些相关文件(如piggy.o)。注意,在Linux2.6内核中,bootsect.S和setup.S被整合为header.S。initramfs(或initrd)文件:initrd是initializedramdisk的意思。主要用于加载硬件驱动模块,辅助内核的启动,挂载真正的根文件系统。装载Linux内核的第一步应该是加载实模式代码(bootsector和setup代码),grub就会把实模式代码setup加载到0x07C00之上的某个地址上,其中setup的前512个字节是bootsector

8、(引导扇区),现在这个引导扇区的作用并不是用来引导系统,而是为了兼容及传递一些参数。之后grub跳转到setup的入口点,入口点为_start例程(根据arch/x86/boot/setup.ld可知)。然后setup最后跳到arch/x86/boot/main.c再经过一系列的跳转,跳到start_k

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。