本章试图以顺序的方式来解释 Linux源代码,以帮助读者对源代码的体系结构以及很多相关的unix特性的实现有一个很好的理解。目标是帮助对 Linux不甚了解的有经验的C程序员对整个 Linux的设计有所了解。这也就是为什么内核漫游的入点选择为内核本身的启始点:系统引导(启动)。这份材料需要对C语言以及对Unix的概念和PC机的结构有很好的了解,然而本章中并没有出现任何的C代码,而是直接参考(指向)实际的代码的。有关内核设计的最佳篇幅是在本手册的其它章节中,而本章仍趋向于是一个非正式的概述本章中所参阅的任何文件的路径名都是指主源代码目录树,通常是/usr/src/ linux。NEM这里所给出的大多数信息都是取之于 Linux发行版1.0的源代码。虽然如此,有时也会提供对后期版本的参考。这篇漫游中开头有MEw图标的任何小节都是强调1.0版本后对内核的新的改动。如果没有这样的小节存在,则表示直到版本1.0.9-1.1.76,没有作过改动。
当PC的电源打开后,80x86结构的CPU将自动进入实模式,并从地址0xFFF0开始自动执行程序代码,这个地址通常是ROM-BIOs中的地址。PC机的BI0S将执行某些系统的检测,在物理地址0处开始初始化中断向量。此后,它将可启动设备的第一个扇区读入内存地址0xC00处,并跳转到这个地方。启动设备通常是软驱或是硬盘。这里的叙述是非常简单的,但这已经足够理解内核初始化的工作过程了。Linux的最最前面部分是用8086汇编语言编写的(boot/ bootsect.S),它将由BI0S读入到内存0x700处,当它被执行时就会把自己移到绝对地址0x90000处,并将启动设备(bot/ setup.S)的下2kB字节的代码读入内存0x90200处,而内核的其它部分则被读入到地址0x10000处。在系统加载期间将显示信息“ Loading.。.”。然后控制权将传递给boot/ Setup.S中的代码,这是另一个实模式汇编语言程序。启动部分识别主机的某些特性以及vga卡的类型。如果需要,它会要求用户为控制台选择显示模式。然后将整个系统从地址κ0000移至0xl000处,进入保护模式并跳转至系统的余下部分(在0x1000处)。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !