前期的Linux的启动程序(bootsect.S、setup.S、head.s) 被 替代 为汉意化为(xtydaz.hb、xtaz.hb、xttcsh.hb) 方案计划
1. bootsect.S 被替换为 xtydaz.hb:xitongyindaoanzhuang.huibian即系统引导安装,汇编引导加载程序 bootsect.S 将 setup.s 代码和 system 模块加载到内存中,并且分别把自己和 setup.s 代码移动到物理内存 0x90000 和 0x90200 处后,就把执行权交给了 setup 程序。其中 system 模块的首部包含有 head.s 代码。bootsect.S 代码是磁盘引导块程序,驻留在磁盘的第一个扇区中(引导扇区, 0 磁道(柱面), 0 磁头,第 1 个扇区)。在 PC 机加电、 ROM BIOS 自检后, ROM BIOS 会把引导扇区代码 bootsect 加载到内存地址 0x7C00 开始处并执行之。在 bootsect 代码执行期间,它会将自己移动到内存绝对地址 0x90000 开始处并继续执行。该程序的主要作用是首先把从磁盘第 2 个扇区开始的 4 个扇区的 setup 模块(由 setup.s 编译而成)加载到内存紧接着 bootsect 后面位置处( 0x90200),然后利用 BIOS 中断 0x13 取磁盘参数表中当前启动引导盘的参数,接着在屏幕上显示“ Loading system...”字符串。再者把磁盘上 setup 模块后面的system 模块加载到内存 0x10000 开始的地方。“在 bootsect 代码执行期间,它会将自己移动到内存绝对地址 0x90000 开始处并继续执行。"应该的意思:"在 bootsect 代码执行期间,它将自己复制一份到内存绝对地址 0x90000 开始处并后跳转继续执行。"原文自己移动会导致理解错误,因为它不是唯一一份的移动而是复制了一份自己A,再跳转到这个A运行,这里原来的位置内存地址 0x7C00后续会被覆盖!2. setup.S 被替换为 xtaz.hb:xitonganzhuang.huibian即系统安装,汇编这里对应的bootsect分身A会被覆盖,当它做完了它该做的事情,它就退场了,留下了工作空间给setup安放其他的数据,一开始的内存地址 0x7C00可能会被system 模块覆盖(system 模块大小大于0x7C00时候).setup 程序的主要作用是利用 ROM BIOS 的中断程序获取机器的一些基本参数,并保存在 0x90000开始的内存块中,供后面程序使用。同时把 system 模块往下移动到物理地址 0x00000 开始处,这样, system中的 head.s 代码就处在 0x00000 开始处了。然后加载描述符表基地址到描述符表寄存器中,为进行 32位保护模式下的运行作好准备。接下来对中断控制硬件进行重新设置,最后通过设置机器控制寄存器 CR0并跳转到 system 模块的 head.s 代码开始处,使 CPU 进入 32 位保护模式下运行。3. head.s 被替换为 xttcsh.hb:xitongtouchushihua.huibian即系统头初始化.汇编在 0x90000开始的ROM BIOS 的中断程序获取机器的一些基本参数因为system大小小于0x90000不会被覆盖!当然setup更不会被覆盖.Head.s 代码的主要作用是初步初始化中断描述符表中的 256 项门描述符,检查 A20 地址线是否已经打开,测试系统是否含有数学协处理器。然后初始化内存页目录表,为内存的分页管理作好准备工作。最后跳转到 system 模块中的初始化程序 init/main.c 中继续执行。4. 以上的前两个xtydaz.hb和xttcsh.hb格式不一致, 后续两种编译器需要修改以实现汉意化,最终能够编译这三个汇编代码, 然后可以实现对引导安装的功能!