作者R119 (= =)
看板ASM
标题Re: [问题] 请问有关於开机 bios 的问题
时间Sun Mar 7 06:06:31 2010
※ 引述《WolfLord (呆呆小狼)》之铭言:
: ※ 引述《operationcow (香蕉公车)》之铭言:
: : 教科书上都写 bios 是存放在 flash RAM 中
: 如果这本书真的写"flash RAM" 请把他丢近垃圾焚化炉
: 如果是老师指定的书,请退选该科。然後到教评会检举
: 老师伪专业。
: : 也说 BIOS 是电源开启後就开始运作
: : 我的问题如下:
: : 1.
: : 电脑一开机的时候
: : 会由电路把 flash RAM 里面的 bios 放进记忆体後才开始执行
: : 还是 CPU 直接读取 flash RAM 里面的 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 而屏敝掉)
: 一般BIOS ROM(FLASH)都是8BIT的居多,而且,就算装备16BIT的ROM一样不
: 符现在CPU大多32,64BIT的现状。当开机时,大部分的主机板都是用8BIT 的
: 模式再ROM上执行BIOS。然後依照设定与侦测, 发现你没有禁止把BIOS搬到
: RAM的话,他就会很块乐的把BIOS COPY一份倒RAM去跑(64/32BIT存取模式)
: 这样机器会跑比较快(快上4-8倍)。另外有一种主机板使用的是I2C的FLASH
: ROM晶片,这种晶片是用序列的方式存取的,无法让CPU直接再上面跑。这种
: 就不管你允不允许,一定会把BIOS抄到RAM上去跑。另外,EFI BOOT的话,他
: 会需要从各种媒体取得外挂(EXTEND)所以也一定会很高兴的把RAM吃掉。
我看不懂 BIOS ROM 是 8bit/16bit 是什麽意思 @@?
一般而言 当开机时 CPU 应是处於 Real Mode 的情况下
在 Real Mode 时 CPU 是以16bit 为单位
而 BIOS ROM 听过有三种 SPI LPC FWH
目前我遇到现在主机板大部分都是用 SPI flash , LPC 跟 FWH 没用过
CPU 基本上读取 BIOS 都是透过 北桥 -> 南桥 -> SPI ROM
主要是透过 memory mapping 的方式读取 我没遇过 CPU 直接联到 Flash ROM 的
在主机板的实作上(Legacy) 主要分成两个部分 Boot Block 跟 POST
在 Boot Block 阶段是不需要 RAM 的
会先做最前面的 CPU/南北桥/Super IO/Clock Gen初始化
在进入 POST 前 BIOS 才会将 BIOS copy 到 RAM 中去执行
而在 EFI 中 一开始对 cpu 南北桥先做基本的初始化後(尽可能的不做不必要的初始)
会先作 Cache as RAM 的动作, 尽早让 EFI 的 C Code 可以使用
再将 Code 复制到 Memory 去执行
: : 2.
: : 另外我不太能理解为什麽由 0xC0000 到 0xEFFFF 是 2 KB
: : 0xF0000 - 0xC0000 = 0x20000 = 3 * (2^4)^4 =\= 2048 byte @@
: 他的意思是把这192K用每一一区块2K的方式分割来贮放延伸的BIOS外挂,这
: 个构造牵涉到早期PC的ON CARD ROM的规划。早期的PC介面卡大多不用驱动程
: 式就能用了。因为卡上有一颗区动的ROM,这个ROM的启动区块就是每2K一个
: 单位,BIOS会从C0000扫描到EFFFF。然後发现有ROM就把他并到BIOS中当作
: 自己的一部分。现在很多卡片都喜欢装熟(BIOS STAGE伪装成BIOS已认识的
: 卡)然後开机後再靠OS挂驱动程式,所以很多教书匠并不了解这一段历史背
: 景与负担。
在这一阶段 BIOS 所有的Code都是在 Memory 执行
BIOS 会先去 scan PCI Device 将 pci device 上的 ROM copy 到 C000:0 以後的位址
而复制的位址就是以 2KB 为单位 复制完毕後 会执行该 ROM 让 device 自行初始化
至於装熟我想你应该是说 bios 会根据device 的type 作处理
ex: ISA PnP 之类的吧 @@?
: : 3.
: : 最後一个问题是
: : 现今的主机板都有提供 bios 可更新的服务
: : 请问写到存放 bios 的 flash RAM 的原理是使用 in, out 这种 port 的方
: : 式还是使用 memory mapped IO??
: : 感谢大家 <(_ _)>
: INP OUTP
: 因为是在板子上做了简易烧录器,并不是把FLASH当RAM用(会坏掉)
通常在开机後 BIOS 会将开机过程中侦测到的资讯写回 Flash ROM
这里的资讯指的就是 SMBIOS 资料 而储存的位址是由 BIOS 所定义的(NVRAM)
并不是只有更新 BIOS 才会有资料写入 Flash ROM
想验证的话 刷新的BIOS後 重开机再用工具读出 Flash ROM
比较两者的 Binary File 就看的出来了
一般而言如果是 Legacy BIOS 的话 是透过 Software SMI 进行
以避免使用者触发其他中断 导致 BIOS 烧录失败
另外写入的方式是透过南桥写入Flash ROM, 根据Flash ROM 的不同会有不同的指令
所以并不是每个厂商的 flash ROM 都可以写入, 要看BIOS 有没有支援
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.118.208