关于ROM BIOS的启动问题

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2078716&page=1&authorid=20499746

>>1,而这里之后我开始不明白了。JMP要跳转到的位置是在高地址(4G末端)Flash Rom BIOS中还是在低地址(1M末端)的shadow BIOS呢?


肯定跳转的目标在1M+64k以下,不会到4G末端。因为这个时候还处于实模式,无法寻址到4G末端去。
注意,big real mode是必须执行到保护模式再退回实模式才行,这个时候离开机已经走了很远了。

>>2,位于低地址(1M处)的(BIOS shadow)是从Flash BIOS拷贝而来呢,还是没有任何拷贝过程仅仅利用地址映射到原Flash BIOS中的呢?

是拷贝到内存中的。如果是直接映射的BIOS的flash的话,那就是做I/O,效率就很低了。
这个应该不叫拷贝,应该说是加载。通常说BIOS拷贝是指下面的内容。

在实模式时,执行的都是未拷贝的BIOS代码(还位于被加载到内存中的位置)。拷贝通常应该是OS为了在运行过程中调用BIOS代码,而把BIOS代码“挪”到其它的地方,例如4G末端;或者是OS要使用BIOS占用的地址空间,而进行“挪”。发生拷贝的时候离启动已经很远了。所以开机时执行的仍然是未拷贝前的BIOS代码。

>>3,无论是拷贝还是映射,内存地址空间上ROM BIOS映射区只有 0xF0000~0x100000之间的64KB。而ROM本身有可能大于2M。那映射的应该是原BIOS程序的一部分,那么是哪一部分呢?

leagcy BIOS,也就是传统的BIOS大小应该都在64K之下。ROM本身大于2M,并非ROM就全部是用来装BIOS代码,例如用于存储设置的NVRAM,应该也包含在ROM之中。其次,ROM本身比BIOS例程大,也有提供给OEM商做扩展的用途。例如现在很流行的linux-BIOS项目就是把一个裁剪过的linux放在BIOS中(听说华硕都出产品了 )。
此外,如果BIOS代码本身大于64K,那么它在地址空间中的布局就会有变化,例如我所用的平台上BIOS代码就位于4G-16M而非0xF0000~0x100000。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值