bootsect Linux,linux_bootsect选读.doc

linux 0.11 内核学习 -- bootsect.s, 万里长征第一步

呵呵,终于将linux 0.11 下面的boot文件夹下的三个文件读完,下面是相关注释,没有汇编基础的人也是可以读的。废话少说,下面就是linux的源码了。

参考资料 Linux内核完全注释.pdf

??????????? 网上相关资料

!时间? : 2010-1-14!工作 : 阅读linux 0.11 源码中的bootsect.s

!总体linux启动过程如下:!!当PC得电源打开之后,80x86结构的CPU将自动进入实时模式,并且从0xFFFF0开始自动执行程序代码,这个地址通常是!ROM-BIOS的地址。PC机的BIOS将执行系统的检测,并且在物理地址的0处开始初始化中断向量。此后,它将可启动设备的第一!扇区(512字节)读入内存的绝对地址0x7c00处,并且跳转到这个地方。启动设备通常是软盘或者是硬盘。这里的叙述是很简单!的,但是这已经足够理解内核的初始化的工作过程。!!linux的0x9000由BIOS读入到内存的绝对地址0x7c00(31k)处,当它被!执行时就会把自己移动到绝对地址0x90000处,并把启动设备中后2kb字节代码(boot/setup.s)读入到内存0x90200处,而内核的!其他部分则被读入到从地址0x10000的开始处。在系统的加载期间显示信息?Loading...",然后将控制权传递给boot/setup.s中!的代码.这是另一个实时模式汇编程序。!!系统启动部分识别主机的某些特性以及vga卡的类型。如果需要,它会要求用户为控制台选择显示模式。然后整个系统从地址!0x10000移至0x0000处,进入保护模式病跳转至系统的余下部分。此时所有的32位运行方式的设置启动被完成:idt,gdt,ldt被!加载,处理器和协处理器也确认,分页的工作也设置好了。最终将调用init/main.c中的main程序。上述的操作的源代码是在!boot/head.s中的。这可能是整个内核中最有诀窍的代码了。注意如果在上述任何一步中出现了一步错误。计算机就会死锁。在!操作系统还没有完全运转之前是处理不了错误的。!!!bootsec.s文件说明如下:!bootsec.s代码是磁盘的引导块程序,驻留在磁盘的第一扇区。在PC机加电rom bios自检之后,引导扇区由bios加载到内存0x7c00!处,然后将自己移动到内存0x90000处。该程序的主要作用是首先将setup模块从磁盘加载到内存中,紧接着bootsect的后面位置!(0x90200),然后利用bios中断0x13中断去磁盘参数表中当前引导盘的参数,然后在屏幕上显示"Loading system..."字符串。再者!将system模块从磁盘上加载到内存0x10000开始的地方。随后确定根文件系统的设备号,如果没有指定,则根据所保存的引导盘的每!类型和种类,并保存设备号与boot_dev,最后长跳转到 setup程序开始处0x90200执行setup程序。!!!注释如下:!! SYS_SIZE is the number of clicks (16 bytes) to be loaded.! 0x3000 is 0x30000 bytes = 196kB, more than enough for current! versions of linux!SYSSIZE = 0x3000!!以下是这一段代码的翻译。!?bootsect.s!bootsect.s被bios启动程序加载至0x7c00 31k处,并将自己移动到地址0x90000 576k处,并跳转到那里。!!它然后利用bios中断将setup直接加载到自己后面0x90200 576.5k,并将system加载到地址0x10000处。!!注意 : 目前的内核系统最大的长度限制为8*65536 512k字节,即使是在将来这也应该没有问题的。我想让他保持简单明了,!这样512k的最大内核长度应该足够了,尤其是这里没有向minix中一样包含缓冲区高速缓冲。!!加载程序已经做的足够简单了,所以持续的独处错误将导致死循环。只能手工重启。只要可能,通过一次取出所有的扇区,加载的!过程可以做的很快.!!!!?bootsect.s??(C) 1991 Linus Torvalds!! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves! iself out of the way to address 0x90000, and jumps there.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值