龟速linux内核学习之旅(三)

  乌龟爬到了setup.s的milestone前,本着踩过每一寸土地的精神上路了。。。

 

     因为看代码的跨度有四五天,当时详细的过程无法(其实是懒)再现,只有凭借书上的笔记来回忆当时的情形。力求把每个地方都搞懂,
这样也许会有意想不到的收获,同时也是培养自己一丝不苟的精神。

     “setup程序读取并保留的参数”表最后少了一项,“0x901FE      2     硬盘有效标识”,这个东西出现在bootsect.s的末尾,应该是在后
面的程序中用到的。开始的几段,只要有Ralf Brown的中断说明就能很好的理解,唯一需要注意的地方是75行的“movsb”这个指令,“movs”(b代表字节)是 8086~Pentium4唯一允许的存储器到存储器的传送指令。

      接下来的困难是对gdt,idt,ldt的结构不清楚,网上的资料很多,但写全的没多少,这指的是对字段的说明。今天发现 http://wiki.osdev.org上的资料很全,平常很多解释也是wiki上最详细,当然前提是英文要过得去。一番折腾后总算明白那些十六进制字段是什么意思了。

      然后是8042键盘控制器,虽然只有短短的七行代码加上一个六行的函数,但这是第一个需要借助硬件的datasheet才能理解的代码,更丰
富的 8042 的知识可以在The Art of Assembly Language这本书的二十章节中找到,不过得要16位版本的书,32位的目录结构都不一样了,甚至
连8042都没了。关于A20地址线也有很有意思的背景资料,有兴趣的可以看看。

      最后是最难搞定的8259A可编程中断控制器,也要借助于datasheet,这个产品级的芯片就是不一样,需要往芯片中写好几个命令和数据才能让它听话,它的模式也多。IO地址是x86架构规定好的,0x20,0xA0是命令IO地址,0x21,0xA1是数据IO地址。linus注释中说这个一点也不好玩,一点没错,比我买的开发板的硬件初始化程序要复杂的多!

      好了,只剩下最后一个汇编文件了。亦或是,噩梦才刚刚开始?

posted on 2010-11-07 20:45  Prajna  阅读(223)  评论(0编辑  收藏  举报

导航