WeHack BBS
Dell Latitude E6230的coreboot移植进展 - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: 固件技术讨论区 (https://bbs.wehack.space/forum-8.html)
+--- 主题: Dell Latitude E6230的coreboot移植进展 (/thread-24.html)



Dell Latitude E6230的coreboot移植进展 - vimacs - 01-25-2018

昨晚把8M的那块flash用风枪吹了下来,然后接8根线到一个芯片座上,这样就方便访问那块8M的flash了。同时,我用了me_cleaner缩减ME并且修改了IFD,让原厂固件全部挪到前8M上。

把E6230的代码rebase到最新的coreboot上,又刷了一遍,发现rfkill的问题是没办法在运行时切换rfkill状态,看ACPI代码,看起来那个开关叫Airplane Mode Switch.从ACPI还能看到,EC的访问用的是0x930和0x934两个端口,之后我可能需要改一下ectool.

   


RE: Dell Latitude E6230的coreboot移植进展 - vimacs - 01-25-2018

交了个patch让ectool从/proc/ioports读EC的端口。
Dell的机器有个bug,用ectool读了EC之后,rfkill状态无法切换了。


RE: Dell Latitude E6230的coreboot移植进展 - hehuiim - 07-23-2018

版主,我现在在用coreboot作BIOS,请问coreboot编译的ROM应该怎么嵌入FITC做的flash镜像中?是作为BIOS分区的镜像么?
有没有一个学习的文档可以提供给学习一下,目前对Intel平台的启动流程还不熟,看SPI FLASH PROGRAM GUIDE中描述对SPI的内容是有严格定义的。


RE: Dell Latitude E6230的coreboot移植进展 - vimacs - 07-23-2018

(07-23-2018, 10:10 PM)hehuiim 提到: 版主,我现在在用coreboot作BIOS,请问coreboot编译的ROM应该怎么嵌入FITC做的flash镜像中?是作为BIOS分区的镜像么?
有没有一个学习的文档可以提供给学习一下,目前对Intel平台的启动流程还不熟,看SPI FLASH PROGRAM GUIDE中描述对SPI的内容是有严格定义的。

FITC是什么?编译出来的coreboot.rom里面,末尾的CBFS是固件的程序和数据,它是要直接写进flash的。对flash的读写一般使用flashrom,读出来的是flash存放的数据,写入的是文件里的数据,不会对数据进行任何变换。
Intel平台的flash布局是开头有Intel Flash Descriptor(IFD)说明flash里的每个区域有什么,PCH要识别的有ME固件、GbE配置信息和BIOS部分。
coreboot社区对它的一般做法是原厂固件的IFD、ME和GbE部分不动,只把coreboot的CBFS写到flash末尾,最后用ifdtool修改IFD用于解锁、修改每个区域的大小。


RE: Dell Latitude E6230的coreboot移植进展 - hehuiim - 07-24-2018

(07-23-2018, 11:32 PM)vimacs 提到:
(07-23-2018, 10:10 PM)hehuiim 提到: 版主,我现在在用coreboot作BIOS,请问coreboot编译的ROM应该怎么嵌入FITC做的flash镜像中?是作为BIOS分区的镜像么?
有没有一个学习的文档可以提供给学习一下,目前对Intel平台的启动流程还不熟,看SPI FLASH PROGRAM GUIDE中描述对SPI的内容是有严格定义的。

FITC是什么?编译出来的coreboot.rom里面,末尾的CBFS是固件的程序和数据,它是要直接写进flash的。对flash的读写一般使用flashrom,读出来的是flash存放的数据,写入的是文件里的数据,不会对数据进行任何变换。
Intel平台的flash布局是开头有Intel Flash Descriptor(IFD)说明flash里的每个区域有什么,PCH要识别的有ME固件、GbE配置信息和BIOS部分。
coreboot社区对它的一般做法是原厂固件的IFD、ME和GbE部分不动,只把coreboot的CBFS写到flash末尾,最后用ifdtool修改IFD用于解锁、修改每个区域的大小。
感谢回复,descriptor这个我有了解了,这边定义了各个区域的大小,位置,权限等等。。。
我不清楚的是coreboot.rom是替换其中的哪个域?是BIOS域吗?按你说的是替换原先的BIOS部分?而且不是整个coreboot.rom替换,只是替换CBFS?
另外coreboot社区是否有这部分的具体说明呢?刚接触不是太了解,如果社区有各类说明文档能否帮忙给下链接,我自个学习即可。谢谢!!
另外FITC是intel提供的flash image tool,用来将ME/FD/BIOS等固件整合成整个flash镜像的工具。


RE: Dell Latitude E6230的coreboot移植进展 - vimacs - 07-24-2018

(07-24-2018, 10:07 AM)hehuiim 提到: 感谢回复,descriptor这个我有了解了,这边定义了各个区域的大小,位置,权限等等。。。
我不清楚的是coreboot.rom是替换其中的哪个域?是BIOS域吗?按你说的是替换原先的BIOS部分?而且不是整个coreboot.rom替换,只是替换CBFS?
另外coreboot社区是否有这部分的具体说明呢?刚接触不是太了解,如果社区有各类说明文档能否帮忙给下链接,我自个学习即可。谢谢!!
另外FITC是intel提供的flash image tool,用来将ME/FD/BIOS等固件整合成整个flash镜像的工具。

coreboot只有BIOS部分的代码,这部分是CPU执行的。对于x86,固件是放在flash末尾的(对于Intel平台实际上是BIOS部分的末尾,但一般来说是一样的)。coreboot对固件所有的组成部分(bootblock,romstage,ramstage,payload,各种数据)做了个简单的组织形成了CBFS,整个CBFS就是固件的内容。我们只要把CBFS放到BIOS部分的末尾就好了。

由于coreboot社区移植的大部分主板都不是出厂就用coreboot的机器,里面有自带的IFD、ME、GbE的部分,因此一般的做法是把它们和coreboot.rom拼在一起形成一个新的镜像。例如Lenovo X220的原厂固件有8M,其中IFD+ME+GbE有5M,这样构建coreboot的时候,CBFS至多有3M(实际上2M在大多数情形下就够了),构建出coreboot.rom后,用 dd if=factory.rom of=build/coreboot.rom bs=1M count=5 conv=notrunc 把原厂固件的IFD,ME,GbE写进coreboot.rom的前5M.

另一种方法是把IFD,ME,GbE都提取出来,在配置的时候指定。 https://www.coreboot.org/Intel_Sandybridge_Build_Tutorial

如果FITC是把各种成分整合成一个可以直接刷进flash的镜像的话,那么这个镜像实际上和用编程器读写用的镜像是一样的。


RE: Dell Latitude E6230的coreboot移植进展 - hehuiim - 07-24-2018

(07-24-2018, 11:02 AM)vimacs 提到:
(07-24-2018, 10:07 AM)hehuiim 提到: 感谢回复,descriptor这个我有了解了,这边定义了各个区域的大小,位置,权限等等。。。
我不清楚的是coreboot.rom是替换其中的哪个域?是BIOS域吗?按你说的是替换原先的BIOS部分?而且不是整个coreboot.rom替换,只是替换CBFS?
另外coreboot社区是否有这部分的具体说明呢?刚接触不是太了解,如果社区有各类说明文档能否帮忙给下链接,我自个学习即可。谢谢!!
另外FITC是intel提供的flash image tool,用来将ME/FD/BIOS等固件整合成整个flash镜像的工具。

coreboot只有BIOS部分的代码,这部分是CPU执行的。对于x86,固件是放在flash末尾的(对于Intel平台实际上是BIOS部分的末尾,但一般来说是一样的)。coreboot对固件所有的组成部分(bootblock,romstage,ramstage,payload,各种数据)做了个简单的组织形成了CBFS,整个CBFS就是固件的内容。我们只要把CBFS放到BIOS部分的末尾就好了。

由于coreboot社区移植的大部分主板都不是出厂就用coreboot的机器,里面有自带的IFD、ME、GbE的部分,因此一般的做法是把它们和coreboot.rom拼在一起形成一个新的镜像。例如Lenovo X220的原厂固件有8M,其中IFD+ME+GbE有5M,这样构建coreboot的时候,CBFS至多有3M(实际上2M在大多数情形下就够了),构建出coreboot.rom后,用 dd if=factory.rom of=build/coreboot.rom bs=1M count=5 conv=notrunc 把原厂固件的IFD,ME,GbE写进coreboot.rom的前5M.

另一种方法是把IFD,ME,GbE都提取出来,在配置的时候指定。 https://www.coreboot.org/Intel_Sandybridge_Build_Tutorial

如果FITC是把各种成分整合成一个可以直接刷进flash的镜像的话,那么这个镜像实际上和用编程器读写用的镜像是一样的。

非常感谢,学习了,实际上就是用coreboot.rom替换掉原先其他厂家用UEFI写的BIOS镜像,其他ME,GBE或者LAN之类的保持不变即可。我先把你给的coreboot网站中连接过一遍。
有一点再请教下,对intel的FSP是否有了解使用呢?我前几天看了下coreboot,menuconfig中配置部分板子支持FSP2.0,我打开了功能后设置了FSP-T/M/S三个镜像对应的路径和CBFS的文件名即可。这部分涉及到DDR的初始化,比较关心。


RE: Dell Latitude E6230的coreboot移植进展 - vimacs - 07-24-2018

(07-24-2018, 11:43 AM)hehuiim 提到: 非常感谢,学习了,实际上就是用coreboot.rom替换掉原先其他厂家用UEFI写的BIOS镜像,其他ME,GBE或者LAN之类的保持不变即可。我先把你给的coreboot网站中连接过一遍。
有一点再请教下,对intel的FSP是否有了解使用呢?我前几天看了下coreboot,menuconfig中配置部分板子支持FSP2.0,我打开了功能后设置了FSP-T/M/S三个镜像对应的路径和CBFS的文件名即可。这部分涉及到DDR的初始化,比较关心。

FSP相关的你可以加入coreboot的邮件列表和IRC讨论。https://www.coreboot.org/Mailinglist