【文魁大脑读书会】52/60马帅《linux内核》

阅读时间:2015年12月2日

阅读笔记:关于boot中bootsect.s的加载

在引导加载程序 bootsect.s 主要将 setup.s 代码和 system 模块加载到内存中,其中 system 模块的 首部包含有 head.s 代码。在把自己移动到物理地址 0x90000 处并将 setup.s 代码放到 0x90200 处后,就 将执行权交给了 setup 程序。

setup 程序的主要作用是利用 ROM BIOS 的中断程序获取机器的一些基本参数,并保存在 0x90000 开 始的内存块中,供后面程序使用。同时把 system 模块往下移动到物理地址 0x00000 开始处,这样,system 中的 head.s 代码就处在 0x00000 开始处了。然后加载描述符表基地址到描述符表寄存器中,为进行 32 位保护模式下的运行作好准备。接下来对中断控制硬件进行重新设置,最后通过设置机器控制寄存器 CR0 并跳转到 system 模块的 head.s 代码开始处,使 CPU 进入 32 位保护模式下运行。

Head.s 代码的主要作用是初步初始化中断描述符表中的 256 项门描述符,检查 A20 地址线是否已经 打开,测试系统是否含有数学协处理器。然后初始化内存页目录表,为内存的分页管理作好准备工作。

最后跳转到 system 模块中的初始化程序 init.c 中继续执行。

你可能感兴趣的:(【文魁大脑读书会】52/60马帅《linux内核》)