[FZH] 第五弹,加速系统启动的 coreboot

microcai microcai在fedoraproject.org
星期六 五月 7 06:11:28 UTC 2011


听听,听听, 你的 BIOS 在加载  GRUB 前都做了什么?!

第一,嘟的一声,所谓的 POST 就过去了。
	其实做的事情还蛮多的。这里你会发现,BIOS 用了很长的时间来做这个事情。Oh
dear. 其实我只希望 BIOS 检查一下 RAM 和 HDD 能工作就可以了。当是 BIOS 偏
偏不这么干。他把所有的硬件都检查了一遍。难怪 BIOS 要那么大了!4M 的
flash chip 都放不下! 而且这么慢!  What the fuck, 你初始化好硬件后,又
初始化了硬件驱动! yep, for DOS 的驱动。 WTF, 我没有 DOS, 拜托你不要为不
存在的 OS 写/初始化 驱动了好不好!


第二,开始枚举引导设备。
	其实事情只有一个, 加载 MBR.  WTF, 你加载 MBR 就算了,为何要为了可能存在
的磁盘,去查找并初始化任何可能的引导设备?? 万一我真的不从 HDD 启动,我
会第一时间告诉你的呀! 反正你找到了N个引导设备之后还是没用,乖乖的从 HDD
读取 MBR。

最后,启动加载的引导设备。
	做了那么多事情,就是为了运行 512byte 的 MBR.

现在假设你 MBR 里是 GRUB.

GRUB 启动了,又开始加载 GRUB stage2,说白了就是个 mini linux vfs layer.
用来支持访问 Linux 的文件系统的。 这里,初始化了一次 VFS .....


GRUB 又去启动 Linux 了


Linux 启动,检查初始化设备和设备驱动程序 .....  (等等,这听起来怎么这么
耳熟????什么? 又在重复着  BIOS 做过的事情!!) 初始化文件系统 ...
(等等,貌似又在哪里听过? GRUB ?? GRUB 不也做了一样的事情么?)

呜呼,难怪系统启动这么慢了,相同的事情做了2次!
等等,貌似 Linux 做的那一次只需要 1-2s ... 而 BIOS 和 GRUB 却做了 ....
> 10s

搞错没有啊!!!
没搞错!是的,就是这样, Linux 并行初始化了 .....

好吧,如果在把 Linux 内核烧录到 BIOS ROM 里,当然,定制一下,前面稍微加
点初始化代码呢? 2s 启动好 Linux 不是问题!
即便 ROM 里的 Linux 有点老,你一样可以通过 kexec 直接启动新的内核!
等等,貌似 GRUB 这玩意没用了? 是的!!是的!!

恩,理想的 Linux 启动过程是这样的.

RESET/POWEROFF -> 高度定制的 Linux 内核 -> linux 内核能使用的一切方法获
得真正的 linux 内核, 包括 NFS 网络启动, HDD 本地启动, USB 启动, CDROM
启动, PXE 启动,COM 口直接传送内核 , 从加密的 HDD 访问 linux 内核 , 使
用智能卡解密 HDD 启动 Linux ...... ->  kexec

到这次 kexec ,我打赌如果是 HDD 引导 ,不会超过 4s ! 而如果是传统的 BIOS
是多少? > 10s

而且,你可以随时改用别的启动方法!可以使用传统 BIOS 压根不能支持的启动方法!

而且,就算你不选择 kexec 启动Linux内核,其实你也已经在 Linux 环境下了!
只不过比较精简罢了!但是起码也有 busybox 提供的一整套装备! 是的 ,  意味
着还没启动系统,你就能做维护了!而且就是开机加电,到你的显示器能反应过来
的时候, shell 已经出现在你面前了!

如果你总是编译了新内核,然后就烧写到 BIOS ROM 里,恭喜你, 你总是可以在
开机后,就发现屏幕显示的内容已经是

Starting XXX			[OK]

了。 呵呵, Linux  启动的比你的显示器还快!


当然,如果你不打算启动 Linux 呢?但是却想享受 coreboot 带来的快速和便捷呢?
呵呵,自然,kexec 可不止能启动 Linux 内核,只要符合 multi-boot 规范都能
启动,aka , 只要 grub 能启动的 , kexec 就能启动。所以,如果一个软件实现
了 PC BIOS 的功能,并这个软件可以通过 kexec 启动 .... 呵呵,自己想就知道
了,启动非 Linux 不是问题。 自然这样的事情也有人做。 OpenBIOS 就是这样做
的。不过是把  coreboot + kexec 一个 BIOS 结合到一个项目中去了。


PS:
BIOS 在 POST 之前,CPU 是不能访问 SDRAM 的。PC BIOS 通过北桥透过南桥,再
到 superio 芯片,通过 SMBUS/I2C 总线协议去给 SDRAM 进行编程,然后北桥才得
以访问 SDRAM, CPU 才有内存可用。所以 BIOS 虽然是在 16bit 模式,确可以直
接识别出 XXXGB 内存。哈哈,人家可是直接通过读写  SDRAM 芯片来进行识别的嘛!

而这个工作却是 coreboot 的死角!!!因为每个主板的方法都不一样!而且没有
SDRAM , 后续的代码都不能运行,也就别谈 DEBUG 了 ......
这个需要靠各个板卡和芯片厂商释出对应的硬件手册才行 ...... 悲剧的
是,coreboot 会直接让 AMI 和 phonex 倒闭! 他们会同意么?

NVIDIA 的芯片目前就 MCP55 (早几百年过时了) 可以,诶,反正我的电脑是用不
了这么先进的 BIOS 咯。

希望 coreboot 能做的更好. move on !



关于邮件列表 Chinese 的更多信息