欢迎来到天天文库
浏览记录
ID:41595382
大小:71.76 KB
页数:27页
时间:2019-08-28
《linux_bootsect_计算机软件及应用_IT计算机_专业资料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、linux0.11内核学习一bootsect.s,万里长征第一步呵呵,终于将linux0.11下面的boot文件夹下的三个文件读完,下面是相关注释,没有汇编基础的人也是可以读的。废话少说,下面就是linux的源码了。参考资料Linux内核完全注释.pdf网上相关资料!时间:2010-1-14!工作:阅读linux0.11源码中的bootsect.s!总体linux启动过程如下:I■!当PC得电源打开之后,80x86结构的CPU将自动进入实时模式,并且从OxFFFFO开始自动执行程序代码,这个地址通常是!ROM-BIOS的地址。PC机
2、的BIOS将执行系统的检测,并且在物理地址的0处开始初始化中断向量。此后,它将可启动设备的第一!扇区(512字节)读入内存的绝对地址0x7c00处z并且觀匕转到这个地方。启动设备通常是软盘或者是硬盘。这里的叙述是很简单!的,但是这已经足够理解内核的初始化的工作过程。!linux的0x9000由BIOS读入到内存的绝对地址0x7c00(31k)处,当它被!执行时就会把自己移动到绝对地址0x90000处并把启动设备中后2kb字节代码(boot/setup.s)读入到内存0x90200处,而内核的!其他部分则被读入到从地址0x10000的
3、开始处。在系统的加载期间显示信息?Loading...;然后将控制权传递给boot/setup.s中!的代码•这是另一个实时模式汇编程序。I!系统启动部分识别主机的某些特性以及vga卡的类型。如果需要,它会要求用户为控制台选择显示模式。然后整个系统从地址!0xl0000移至0x0000处,进入保护模式病期匕转至系统的余下部分。此时所有的32位运行方式的设置启动被完成:idt,gdt,ldt被!加载,处理器和协处理器也确认,分页的工作也设置好了。最终将调用init/main.c中的main程序。上述的操作的源代码是在!boot/hea
4、d.s中的。这可能是整个内核中最有诀窍的代码了。注意如果在上述任何一步中出现了一步错误。计算机就会死锁。在!操作系统还没有完全运转之前是处理不了错误的。I■I■!bootsec.s文件说明如下:fbootsec.s代码是磁盘的引导块程序,驻留在磁盘的第一扇区。在PC机加电rombios自检之后,引导扇区由bios加载到内存0x7c00!处,然后将自己移动到内存0x90000处。该程序的主要作用是首先将setup模块从磁盘加载到内存中,紧接着bootsect的后面位置!(0x90200)撚后利用bios中断0x13中断去磁盘参数表中当
5、前引导盘的参数,然后在屏幕上显示"Loadingsystem..."字符串。再者!将system模块从磁盘上加载到内存0x10000开始的地方。随后确定根文件系统的设备号,如果没有指走,则根据所保存的引导盘的每!类型和种类并保存设备号与boot.dev,最后长跳转到setup程序开始处0x90200执行setupI■I■!注释如下:I■!SYS_SIZEisthenumberofclicks(16bytes)tobeloaded.!0x3000is0x30000bytes=196kB,morethanenoughforcurrent
6、!versionsoflinuxiSYSSIZE=0x3000I■!以下是这一段代码的翻译。!bootsect.sfbootsect.s被bios启动程序加载至0x7c0031k处,并将自己移动到地址0x90000576k处,并跳转到那里。!它然后利用bios中断将setup直接加载到自己后面0x90200576.5k,并将system加载到地址0x10000处。I■!注意:目前的内核系统最大的长度限制为8*65536512k字节,即使是在将来这也应该没有问题的。我想让他保持简单明了,!这样512k的最大内核长度应该足够了,尤其是这
7、里没有向minix中一样包含缓冲区高速缓冲。!加载程序已经做的足够简单了,所以持续的独处错误将导致死循环。只能手工重启。只要可能,通过一次取岀所有的扇区,加载的!过程可以做的很快.!bootsect.s(C)1991LinusTorvaldsI!bootsect.sisloadedat0x7c00bythebios-startuproutines,andmoves!iselfoutofthewaytoaddress0x90000/andjumpsthere・i■!Itthenloads'setup'directlyafteritse
8、lf(0x90200)256b,andthesystem!at0x10000,usingBIOSinterrupts.!NOTE!currentlysystemisatmost8*65536byteslong.Thisshouldbe
此文档下载收益归作者所有