Linux 0.11内核之旅(一) :bootsect.s

linux 0.11内核是Linus大神写的很早的一个版本的内核,麻雀虽小五脏俱全,总共代码不过两万多行,很适合linux内核入门者拿来对比学习。

下面记录本人阅读的第一个源文件也是内核上电执行的第一个文件bootsect.s.

启动流程(bootsect.s)

1.开机。

2.BOIS会读取软盘的第一个扇区(512Byte),里面放着bootsect.s,读取到内存中0x07C0:0000的位置,然后跳转至此处执行。

3.开始执行bootsect.s,将自身从0x07C0:0000搬运至0x9000:0000[长度512Byte]。

4.跳转至0x9000:0000处执行,设置堆栈段和堆栈指针 ss:sp=0x9000:FF00。

5.从磁盘读取setup.s到0x9000:0200[长度512Byte * 4]

6.从软盘读取每磁道扇区数,放到cs:sector 变量里。

7. 调用BOIS打印中断,打印 msg1:""Loading my system ..."

扫描二维码关注公众号,回复: 5365526 查看本文章

8.从软盘读取system.img到1000:0000[长度3000:0000]

9.关闭软盘电机,已提示读取完成。

10.判断根文件系统所在的分区是/dev/PS0 还是/dev/at0 或者是用户自定义/dev/ha1?,结果保存至相应内存中。

11.跳转至0x9000:0200处执行(执行setup.s)

显然bootsect.s的主要工作就自身以及后续的镜像搬运至合理的位置,然后跳至后续程序继续执行。

猜你喜欢

转载自blog.csdn.net/a827143452/article/details/88048550