免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 17012 | 回复: 50

对版主mik的【 bios探索之旅 】有问题的发这里 [复制链接]

minl 该用户已被删除
发表于 2008-04-13 01:47 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
minl 该用户已被删除
发表于 2008-04-13 01:50 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2008-04-13 08:36 |显示全部楼层

回复 #2 minl 的帖子

在 ROM 中运行为什么会跟 RAM 地址冲突呢?

北桥芯片有 Shadow RAM 功能,ROM 和 RAM 都会映射到同一段地址,但是根据读写信号的不同转到 ROM 或者 RAM去。

[ 本帖最后由 abutter 于 2008-4-13 08:50 编辑 ]

论坛徽章:
0
发表于 2008-04-13 12:12 |显示全部楼层
版主果然在研究BIOS啊,文档在哪儿呢?

论坛徽章:
0
发表于 2008-04-13 19:32 |显示全部楼层
终于找到帖子了,原来置顶的。
牛啊,mik老大居然用这种方式去研究bios。为啥不找一个开源的bios项目,这样分析太费劲了吧。

我问一个问题:
上电的时候CS位于0XFFFF0000,但执行完一个long jmp后CS会被flush掉,按理说后面就不会有高于1M+64K的地址出现了,那么在4G末端映射整个BIOS ROM又有什么用呢?

论坛徽章:
0
发表于 2008-04-13 22:55 |显示全部楼层
原帖由 zx_wing 于 2008-4-13 19:32 发表
终于找到帖子了,原来置顶的。
牛啊,mik老大居然用这种方式去研究bios。为啥不找一个开源的bios项目,这样分析太费劲了吧。

我问一个问题:
上电的时候CS位于0XFFFF0000,但执行完一个long jmp后CS会被flush掉,按理说后面就不会有高于1M+64K的地址出现了,那么在4G末端映射整个BIOS ROM又有什么用呢?


这样分析确实是很费劲,但就是因为够原始,是彻底弄清问题的方法吧。你觉得是不是? 开源的 bios 项目,之前倒真的没想过。

第一条 long jmp 指令,也就成为 x86 pc 机的固有约定或者说是规范吧。

     其实主要的原因是兼容!追溯到最早 808X 系列处理器,8080 是 16 位 address bus, 8086 及 8088 改进为 20 进 address bus,整个 808X 系列处理就是整个 x86 架构的始祖。寻址空间 00000 ~ FFFFFh 也就是 1M 的空间。
     当时 IBM 决定使用 8086 处理作为 IBM PC 机,故事就从那里开始,BIOS 这个名词也就是 IBM 发明出来的,IBM 搞出来的 BIOS 定位在 8086 处理器的寻址高端,也就是 F0000 到 FFFFF 区域。从 386 开始,address bus 增加到 32 条,寻址范围从 0 ~ FFFFFFFFh,BIOS 的定位也在 4G 的高端FFFF0000 ~ FFFFFFFFh,但为了兼容,对 F0000 ~ FFFFF 的访问被映射到 FFFF0000 ~ FFFFFFFFh,这是从理论上定义的。
     从物理上来讲,F0000 ~ FFFFFh 映射到 FFFF0000 ~ FFFFFFFFh 靠硬件来保证,在地址解码时,F0000 ~ FFFFFh 与 FFFF0000 ~ FFFFFFFFh 会被解码到同一个区域。现在的芯片组提供的厂商有很多,如:Intel,AMD,nvidia,VIA,SIS 等,它们的解码实现方法可能会不同,但都要保证这个所谓的“别名”机制。
    Intel 实现是:MCH 将 C_0000 ~ F_FFFF 这段区域定义为 PAM(Programed attribute memory),分 disable,read-only ,wirte-only,read/write 四种属性,初始属性是 disable,也即是无用,因此这段区域将被送去 ICH 解码,FFE0_0000 ~ FFFF_FFFFh 的也被 ICH 解码,ICH 转交 LPC bridge 处理,它们被解码为同一区域。
    AMD 实现是:无论是 C_0000 ~ F_FFFF,还是 FFFC_0000 ~ FFFF_FFFF 最终结果都将送到 LPC bus 上的 FFFC_0000 ~ FFFF_FFFF 物理地址上。其它的厂商实现也大体这样。

    因此:long jmp 后,转到 FE05B(jmp far ptr F000:E05B)执行,它将被映射到物理地址 FFFFE05B 上,这还是 BIOS 所在的 ROM 中。第一条指令的 FFFFFFF0 与 第二条的 FE05B 都是在 BIOS 的 ROM 上

这是我的理解。

论坛徽章:
0
发表于 2008-04-13 22:59 |显示全部楼层
原帖由 abutter 于 2008-4-13 08:36 发表
在 ROM 中运行为什么会跟 RAM 地址冲突呢?

北桥芯片有 Shadow RAM 功能,ROM 和 RAM 都会映射到同一段地址,但是根据读写信号的不同转到 ROM 或者 RAM去。

shadow 功能是靠 NorthBridge 和 SouthBridge 联合实现的
minl 该用户已被删除
发表于 2008-04-14 01:34 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2008-04-14 13:23 |显示全部楼层
原帖由 mik 于 2008-4-13 22:55 发表


这样分析确实是很费劲,但就是因为够原始,是彻底弄清问题的方法吧。你觉得是不是? 开源的 bios 项目,之前倒真的没想过。

第一条 long jmp 指令,也就成为 x86 pc 机的固有约定或者说是规范吧。

   ...

当时 IBM 决定使用 8086 处理作为 IBM PC 机,故事就从那里开始,BIOS 这个名词也就是 IBM 发明出来的,IBM 搞出来的 BIOS 定位在 8086 处理器的寻址高端,也就是 F0000 到 FFFFF 区域。从 386 开始,address bus 增加到 32 条,寻址范围从 0 ~ FFFFFFFFh,BIOS 的定位也在 4G 的高端FFFF0000 ~ FFFFFFFFh,但为了兼容,对 F0000 ~ FFFFF 的访问被映射到 FFFF0000 ~ FFFFFFFFh,这是从理论上定义的。

多谢老大啦,上面这段话说明了这是个历史原因,正是我需要的

论坛徽章:
0
发表于 2008-04-17 22:21 |显示全部楼层
顶一个,关注mik的进度,期待更新
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP