UEFI开发探索01-起篇

2013年的时候,和联想的双网安全隔离计算机项目进入了平稳阶段。经过了前今年的合作开发,几代不同的产品的磨合,Q45、G41、H61等,整个方案已经成熟。再开案的话,我觉得大部分问题都会集中在硬件方面,软件问题不会太多。

不过,当时实际上软件还留下一个问题需要想办法解决,那就是Option ROM对UEFI的支持。在12年出货的产品中,因为时间比较紧,为了把Option ROM移植到UEFI下(联想2011年左右基本都转换为UEFI BIOS),我采用了一种比较省事的方法,用AMI的VBE来开发。主要是考虑到有问题可以去请教联想的BIOS工程师,让我这个虽然号称底层比较熟悉,但没有实操过BIOS开发的人,这是种比较保险的做法。

因此,即便我了解intel提供了UDK可以直接进行开发,我仍旧走了上述的路线。当时的开发很难,从VBE新手到开发出符合要求的UEFI driver(实际上就是个option rom),花了我三个礼拜,像打了鸡血一样不眠不休的完成了。在此要感谢当时还在Intel的Raymond,张银奎老师,帮我向intel bios部门咨询解决了显示的一个问题。以及我刚出生没多久的宝贝,因为她我才在北京待不住,用了最快的速度解决了这个项目问题,就为了早一刻回南京抱她。

所以,2013年的时候,摆在我面前的问题是,如何用intel UDK把Option ROM开发出来,一方面用在联想的合作项目上;另外一方面,把它用在公司的另外一个产品-隔离卡上。随着UEFI越来越普及,未来肯定会只支持UEFI,当时隔离卡上面的Legacy oprom会无法运行的。几年过去了,这个论断终于实现了。现在是2019年,公司就是因为当时的这个技术设计,今年3月还没过完,半个月的销量,超过了去年同期一个月的销量了。我甚是欣慰。

当时的时间比较充裕,毕竟和联想的案子已经有一个可用的软件版本了,而隔离卡这边的需求还没到时候。仿照之前学习底层开发的过程,我制定了一个小计划,从控制键盘、图形显示、鼠标显示、访问PCI端口、SMBUS通讯、USB访问、网络访问….这样的顺序开始尝试写代码。虽然因为各种原因,在完成了最初的目标(支持公司产品在UDK下的开发)后,有些工作没有继续了。但我觉得还是基本上把UEFI下的开发实现了,即便要开发其他的产品,现有的代码也能非常好的用上。

图1 robin’s Uefi 代码列表

在最早开始写博客的时,我就计划把这段历程写下来。今天终于如愿开始了,记录我挥汗编程的日日夜夜,也纪念我当时用来开发的华硕945主板的机器,跟了我那么多年,终于没有机会再使用它了。

是为开篇。

发表评论

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