作者ggg12345 (ggg)
看板ASM
标题Re: [问题] 请问有关於开机 bios 的问题
时间Mon Mar 8 19:05:02 2010
※ 引述《operationcow (香蕉公车)》之铭言:
: 教科书上都写 bios 是存放在 flash ROM 中
: 也说 BIOS 是电源开启後就开始运作
: 我的问题如下:
: 1.
: 电脑一开机的时候
: 会由电路把 flash ROM 里面的 bios 放进记忆体後才开始执行
: 还是 CPU 直接读取 flash ROM 里面的 bios 来执行??
: 因为在看 efi 的 spec 看到如下这段
: Current option ROM technology requires images to be shadowed
: in system memory address range 0xC0000 to 0xEFFFF on a 2048
: byte boundary. This dependency not only limits the number of
: Option ROMs, it results in unused memory fragments up to 2 KB.
: 因为他提到的是 shadow system memory(表示 bios 有被载入到主记忆体
: )而不是 shadow system memory address space(可能是因为 memory
: mapped IO 而屏敝掉)
说个古老的故事:
Shadow ROM 是 Intel 8080 MDS800 时代所用的技术, ROM 的 address
space 跟 DRAM 占开机 reset 後的前面(0000开始)同一位址, power
on reset 之後, processor 对 memory 读的是 ROM , 写的却是 RAM,
测试记忆体时先读後写, 做过整个 block 之後, 再经一个 I/O 指令设
定, 就把读的记忆体, 从 ROM 切换为 DRAM , 就变成可以修改内容的
shadow ROM.
原始的 IBM PC 并没有使用这个技术, 但台湾相容的 IBM PC 使用这个
Shadow ROM , 她有个好处就是可以开机後透过磁碟更换 BIOS ROM, 还
可以透过 INT 3 进行 debug , 以 single step 测试/追踪 BIOS 程式.
但最主要是 PC 286/AT 之後, DRAM 变大跟开机的 8086 real mode 要
用的 1MB 最高位址的 ROM address space 重叠, 做成 shadow ROM 之
後, 执行 BIOS 程式比用 ROM 可以快很多, 可不必插进很多 wait
cycle. 同时记忆体不会有段不能更改的位址连续空间.
: 2.
: 另外我不太能理解为什麽由 0xC0000 到 0xEFFFF 是 2 KB
: 0xF0000 - 0xC0000 = 0x20000 = 3 * (2^4)^4 =\= 2048 byte @@
进入 protection mode 之後, 置於 8086 mode 1MB space 最後面的
BIOS ROM(含介面卡上的 ROM)记忆体位址会被硬体移到最後的 16 MB
底部.
: 3.
: 最後一个问题是
: 现今的主机板都有提供 bios 可更新的服务
: 请问写到存放 bios 的 flash ROM 的原理是使用 in, out 这种 port 的方
: 式还是使用 memory mapped IO??
: 感谢大家 <(_ _)>
开机的 ROM 本来就跟 DRAM 都占用同样的 memory address spce. 以前的
8bit EEPROM 常用两颗并排, 透过 byte swap 电路可以同时读取任何位置
连续 2 bytes. 烧入 EEPROM 是靠某支脚使用高电压, 所以会用 I/O 指令
设定供应的电压後及切换 shadow ROM 为 ROM 之後, 就透过 memory
address read/write 进行清除与烧录.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.4.12
1F:推 limpidsky:what a legacy... 04/09 13:56