Linux0.11-引导启动程序(boot)

主要描述 boot/目录中的三个汇编代码文件,见列表 3-1 所示。正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式。bootsect.s 和 setup.s 采用近似于 intel 的汇编语言语法,需要使用 intel 8086 汇编编译器和连接器 as86 和ld86,而 head.s 则使用 gnu 的汇编程序格式,并且运行在保护模式下,需要用 gnu 的 as 进行编译。这是一种 at&t 语法的汇编语言程序。
使用两种编译器的主要原因是由于对于 intel x86 处理器系列来讲,gnu 的编译器仅支持 i386 及以 后出的 cpu。不支持生成运行在实模式下的程序。
阅读这些代码除了你需要知道一些一般 8086 汇编语言的知识以外,还要对采用 intel 80x86 微处理器的 pc 机的体系结构以及80386 32 位保护模式下的编程原理有些了解。所以在开始阅读源代码之前可以先大概浏览一下附录中有关 pc 机硬件接口控制编程和80386 32 位保护模式的编程方法,在阅读代码时再就事论事地针对具体问题参考附录中的详细说明。
这里先总的说明一下 linux 操作系统启动部分的主要执行流程。当 pc 的电源打开后,80x86 结构的 cpu 将自动进入实模式,并从地址 0xffff0 开始自动执行程序代码,这个地址通常是rom-bios中的 地址。pc 机的 bios 将执行某些系统的检测,并在物理地址 0 处开始初始化中断向量。此后,它将可启动设备的第一个扇区(磁盘引导扇区,512 字节)读入内存绝对地址 0x7c00 处,并跳转到这个地方。启动设备通常是软驱或是硬盘。这里的叙述是非常简单的,但这已经足够理解内核初始化的工作过程了。
linux 的最最前面部分是用 8086 汇编语言编写的(boot/bootsect.s),它将由 bios 读入到内存绝对地址0x7c00(31kb)处,当它被执行时就会把自己移到绝对地址0x90000(576kb)处,并把启动设备中后 2kb字节代码(boot/setup.s)读入到内存0x90200处,而内核的其它部分(system 模块)则被读入到从地址0x10000开始处,因为当时 system 模块的长度不会超过 0x80000 字节大小(即 512kb),所以它不会覆 盖在 0x90000 处开始的 bootsect 和 setup 模块。后面 setup 程序将会把system模块移动到内存起始处,这样 system 模块中代码的地址也即等于实际的物理地址,便于对内核代码和数据的操作。图 3-1 清晰地显示出 linux 系统启动时这几个程序或模块在内存中的动态位置。其中,每一竖条框代表某一时刻内存中各程序的映像位置图。在系统加载期间将显示信息loading...。然后控制权将传递给 boot/setup.s 中的代码,这是另一个实模式汇编语言程序。
启动部分识别主机的某些特性以及 vga 卡的类型。如果需要,它会要求用户为控制台选择显示模式。 然后将整个系统从地址0x10000 移至 0x0000 处,进入保护模式并跳转至系统的余下部分(在 0x0000 处)。 此时所有32 位运行方式的设置启动被完成: idt、gdt 以及 ldt 被加载,处理器和协处理器也已确认, 分页工作也设置好了;最终调用init/main.c 中的 main()程序。上述操作的源代码是在boot/head.s中的, 这可能是整个内核中最有诀窍的代码了。注意如果在前述任何一步中出了错,计算机就会死锁。在操作系统还没有完全运转之前是处理不了出错的。
为什么不把系统模块直接加载到物理地址 0x0000 开始处而要在 setup 程序中再进行移动呢?这是因 为在setup程序代码开始部分还需要利用 rom bios 中的中断调用来获取机器的一些参数(例如显示卡 模式、硬盘参数表等)。当 bios 初始化时会在物理内存开始处放置一个大小为 0x400 字节(1kb)的中断向量表,因此需要在使用完 bios 的中断调用后才能将这个区域覆盖掉。

IoT行业与通信云的融合机遇
选用压力表时应注意哪些方面
闻泰科技AI×IoT战略初现
变频器的主要技术参数有哪些?
pcb设计如何用下小电流控制大电流
Linux0.11-引导启动程序(boot)
索尼PSVR入选《时代周刊》2016年度最佳发明
春运期间广东高速服务区充电桩建设情况如何
华新机电携手汇川技术,让起重装备成为“绿色智能力量”!
报告显示 2018年新能源汽车总销量只占了汽车市场的4%
小米6plus什么时候上市?小米6plus最新消息:小米6plus来了,尴尬了!小米6还没有预约到手小米6 Plus就来了
Maxim面向运动控制和工业应用推出最新收发器,数据速率提高两倍、传输距离延长50%
实现低功耗FPGA电子系统优化技巧与方法
全球5G射频前端发展趋势分析
威马电动车发生自燃,宣布召回1282辆隐患车型
高输入电压隔离型反激式DC/DC 控制器LT3748H
云计算撑起足球盛宴 阿里云CDN智能调度技术解读
存储虚拟化有什么好处
Linux主要应用在那些领域
我国三大运营商正在积极在全国范围内布局5G以加快5G的商用