[Linux内核完全剖析]第六章 引导启动程序(boot)总结

Linux0.11中设备命名方式:

1-内存、2-磁盘、3-硬盘、4-ttyx(串行终端)、5-tty(控制终端)、6-并口、7-匿名管道。
硬盘逻辑设备号命名方式:设备号*0x100+次设备号。
次设备号:(硬盘号-1)*5+分区号,如不带分区号则代表整块硬盘。
这种命名方式在0.95内核以后被废除。

boot目录下共有3个文件:
1、bootsect.s:as86汇编文件,主要用来载入系统内核。其功能是利用BIOS 13h中断把第一个扇区(程序自身)复制到0x90000处,从0x7c00跳转至0x900xx,并把setup.s(第二至四扇区)加载到0x90200处。再把system模块加载到0x10000处,最后跳转到setup.s程序继续执行。

2、setup.s:as86汇编文件,主要用来做一些进入内核前的初始化工作。先用BIOS中断读取系统数据到0x90000处,然后把0x10000-0x8fffff处的内核模块移动到0处。然后设置和加载IDT和GDT,设置硬件中断为0x20-0x2f,进入保护模式,最后跳转到head.s程序继续执行。
setup

3、head.s:gas32位汇编文件,和内核的其他程序一起被链接成system模块,位于system模块最前端。首先是加载各个数据段寄存器,然后重设IDT的所有表项到一个只报错误的哑中断程序ignore_int。再重新设置GDT,检测A20地址线是否真正开启,检测是否有数学协处理器。设置内存分页机制,把页目录放到物理地址0开始处,后面紧跟四个页表。最后手工构造栈返回到init/main.c中

 

This entry was posted in 操作系统 and tagged . Bookmark the permalink.

3 Responses to [Linux内核完全剖析]第六章 引导启动程序(boot)总结

  1. 52computer says:

    咦,原来D大也看过0.11的代码 啊

回复 zznda4 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注