WeHack BBS
谈谈我这几年做 coreboot 相关工作的经验 - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: 固件技术讨论区 (https://bbs.wehack.space/forum-8.html)
+--- 主题: 谈谈我这几年做 coreboot 相关工作的经验 (/thread-81.html)



谈谈我这几年做 coreboot 相关工作的经验 - vimacs - 06-19-2019

我不记得是什么时候开始对固件感兴趣的。2015 年,我开始接触 coreboot. 我先买了台 X60,学会用 flashrom 刷固件。然后买了台 X201 学习用编程器刷固件,当时 ch341a 编程器还没被 flashrom 支持,我是在网上搜索发现了 ch341prog (https://github.com/setarcos/ch341prog),用它给我的 X201 刷机。开始的时候我还不知道写 flash 之前要先擦除,把机器刷砖了之后过了好长时间才知道怎么刷。后来在 BBS 上分享经验,才发现 ch341prog 的作者是我们社团的指导老师。

最早为 coreboot 贡献代码,是发现 coreboot 里面有一个工具在构建的时候还在用 svn,于是做了个小的修复 (https://review.coreboot.org/12710),在为 coreboot 贡献第一个补丁的过程中,我学会了使用 Gerrit Code Review. 那个时候还不知道 coreboot 有 make gitconfig 可以自动配置 git 使其可以在提交时添加 Change-Id,也不知道 git commit -s 可以自动添加 Signed-off-by. 后来学嵌入式,我的大作业选择了把 coreboot 移植到 CubieTruck,在此过程中发现当时上游的 coreboot 在 CubieBoard 1 中跑不起来,后来通过 bisect 发现了问题,进行了修复,于是有了我给 coreboot 的第二个补丁。

我开始给 coreboot 做功能上的改进和错误修复,是在我尝试给联想 ThinkPad T420 安装 Ivy Bridge 的 CPU,我相信 Sandy Bridge 的笔记本不能上 Ivy Bridge 的 CPU 只是固件的限制,用了自由的 coreboot 之后,就没这个限制了。在这过程中,我还尝试移植 coreboot 到 T420,后来有人提醒我 T420 的移植已经在 Gerrit 上了,于是我就用 Gerrit 上的代码。我买到一块 Ivy Bridge 的 CPU 之后,就开始刷机并测试,发现 USB 调试口可以看到调试信息,系统也能启动,但是操作系统启动之前显示不正常,检查代码之后,发现是因为代码假设 T420 用的是 Sandy Bridge 的 CPU,所以核显没有正确初始化,我就写了一个动态检测 CPU 类型,选择相应核显初始化代码的补丁。(https://review.coreboot.org/12087) 在使用的过程中,我发现插两条不同的内存的时候,dmidecode 出错,于是发现了 SMBIOS type 17 生成的代码出了问题,又提交了一个补丁。(https://review.coreboot.org/14008) 这两个补丁同时在 coreboot 的一个的 changelog 中被提及。(https://blogs.coreboot.org/blog/2016/03/22/coreboot-changelog-march-2-march-15/)

在给 coreboot 贡献代码的时候,我还同时维护了 coreboot 中的一些部件,如 libpayload 相关 payload 的构建,工具链的更新等。后来我想做一些更有挑战性的项目,恰好 coreboot 有个 autoport 工具,于是开始做 coreboot 的移植。当时我手上有台 HP EliteBook 2760p,而 HP EliteBook 作为和联想 ThinkPad 一个定位的商务本,保有量也不小,因此做它的移植也很有意义。但是 HP EliteBook 的 EC 让我遇到了意想不到的麻烦,EC 固件和 BIOS 存在同一块 flash 里面,如果没有正确地放置,则笔记本没法上电。我到了 2017 年寒假的时候,花了几天的空闲时间进行实验分析,才分析出了 EC 固件的存放位置,和它使用的校验码。解决了启动的问题之后,就是解决 EC 风扇控制和 ACPI 的问题,在这过程中,我积累了不少 UEFI 逆向的经验。最终 HP EliteBook 的支持进入上游,是 2017 年暑假的时候了。

去年(2018年)年末的时候,我看到 coreboot 支持了 Haswell 平台的 ASRock H81M-HDS,于是我开始对 Haswell 平台感兴趣。我入了一套 ASRock H81M-HDS,做了一段时间 Haswell MRC 的逆向分析,后来由于要做毕业论文就没搞下去了。现在有了点时间,就把这些东西重新搞起来,在这期间,NSA 发布了他们的逆向工具 Ghidra,它的反编译器大大提高了我的逆向效率。同时,我还写了针对 Haswell 平台的 autoport,希望可以更容易地把 coreboot 移植到 Haswell 平台的机器上。


RE: 谈谈我这几年做 coreboot 相关工作的经验 - gnuxwy - 06-20-2019

从coreboot贴吧转到楼主的网站来的。。。
楼主能给coreboot项目提供补丁,水平真高啊。不过好东西也要向更多的人分享才好。

屮经常去的网站有个无忧启动论坛 bbs.wuyou.net ,哪里有个grub4dos板块。
grub4dos开发者不点,yaya, chenall 都氏水平很不错开源程序员。楼主可以在哪里也发些文章,共同交流下。。。


RE: 谈谈我这几年做 coreboot 相关工作的经验 - leangang - 05-28-2023

意外发现楼主的贴子。。我最近弄了一台ideapad 5i chromebook笔记本想拓展内存,刷成win10。如楼主文中提到的flashrom工具,我也是通过这工具把机器对应的bios固件(coreboot4.20,Mrchromebox官方)刷进主板,然后安装window10系统,但发现系统没法识别16G运行内存,识别成了8G,用硬件检测工具如此,我当时以为是内存颗粒虚焊,但想想也不对,前几个小时我用着的时候还是16G内存,不至于那么凑巧吧。然后就在网络上搜相关信息,发现大概率是coreboot固件的问题,板载内存的识别是需要依赖主板bois参与的,而我在拓展好内存并 验证颗粒没焊接问题后,就直接把机器对应型号的Mrchromebox官方固件刷进了主板,然后就有点郁闷了。。。。请问我这种情况是需要 重新编译coreboot固件并更新到主板么??求解答