UEFI开发探索12 – Oprom测试板

今天拿到了测试板,可以把UEFI Oprom写到硬件里面去了。手有点痒,想写一个程序来试试。

测试用的板子非常简单,去除了所有实际的硬件控制元器件,只留下了WCH366和一个128K的ROM。不过按照沁恒电子的资料,WCH366只支持64K的寻址,而且还不能同时寻址,意味着我们只有32K的空间可以写代码。

做了十个,足够我折腾很长时间了。

图1 测试用的小板卡

测试用的板子非常简单,去除了所有实际的硬件控制元器件,只留下了WCH366和一个128K的ROM。不过按照沁恒电子的资料,WCH366只支持64K的寻址,而且还不能同时寻址,意味着我们只有32K的空间可以写代码。

图2 WCH366 spec

我直接在已经实现的Option ROM代码上修改了一下,用来演示。如果有读过Foxdisk代码的技术同好,可能会发现我的代码有点熟悉:

图3 代码列表

如图,实际上很多代码确实是从Foxdisk中移植过来的,特别是图形和文字显示部分。毕竟这是为了开发产品而做的,我力图做到屏蔽底层细节。也就是说,所有和硬件打交道的部分,都提供同样或者类似的接口,让用户层去调用。

这是很自然的做法,由此能保证以前的一些工具和函数能够共用。比如提取汉字、提取图形,调试smbus的工具等,都可以直接或者略微修改就可使用了。

在Foxdisk中介绍了一些这样的工具(那个系列的博客还没有写完,后续会继续写),这里就不讨论细节了。

如何编写Option ROM,要放到比较后面的章节来记录。在那之前,还有太多的程序需要写,包括PCIE设备的访问、汉字显示、BMP/PCX图形显示、SMBUS访问等。今天主要试一下到手的测试板卡。

编译好了之后,我准备将ROM代码写入板卡。用DOS下的一个工具来刷写,沁恒电子提供的。

我的测试平台是AMD A8,MSI的BIOS。测试中发现,这个平台不支持大容量存储设备的PCIE ROM,将PCI子设备改为网络设备后可以了。(修改inf文件)

图4 测试平台

写入固件代码:

图5 写入固件

写完后重启,最后的显示效果:

图6 显示效果

大功告成!

35 total views, 1 views today

发表评论

电子邮件地址不会被公开。 必填项已用*标注