WeHack BBS
[讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: 固件技术讨论区 (https://bbs.wehack.space/forum-8.html)
+--- 主题: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? (/thread-322.html)

页: 1 2 3 4 5


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 维格纳朋友 - 02-08-2023

(02-08-2023, 11:31 AM)vimacs 提到:
(02-08-2023, 11:25 AM)维格纳朋友 提到:
(02-08-2023, 11:17 AM)vimacs 提到:
(02-08-2023, 10:57 AM)维格纳朋友 提到: 如果superiotool正常工作,大概superio的部分也会被正常生成。

老实说这个状态,感觉开发者可以用SSH直接远程调试。

romstage.c里的void mainboard_config_superio并没有被正常配置。
注释掉就好了吧?
设备树那边用h81m-p33设备树里的
代码:
                                chip superio/nuvoton/nct6779d
                                        device pnp 4e.1   off end       # Parallel
                                        device pnp 4e.2   on            # UART A
                                                io  0x60 = 0x3f8
                                                irq 0x70 = 4
                                        end
                                        device pnp 4e.3   off end       # UART B, IR
                                        device pnp 4e.5   on            # Keyboard
                                                io  0x60 = 0x60
                                                io  0x62 = 0x64
                                                irq 0x70 = 1
                                                irq 0x72 = 12
                                        end
                                        device pnp 4e.6   off end       # CIR
                                        device pnp 4e.7   off end       # GPIO6-8
                                        device pnp 4e.8   off end       # WDT1, GPIO0, GPIO1
                                        device pnp 4e.108 on  end       # GPIO0
                                        device pnp 4e.9   off end       # GPIO1-8
                                        device pnp 4e.109 off end       # GPIO1
                                        device pnp 4e.209 off end       # GPIO2
                                        device pnp 4e.309 off end       # GPIO3
                                        device pnp 4e.409 off end       # GPIO4
                                        device pnp 4e.509 off end       # GPIO5
                                        device pnp 4e.609 off end       # GPIO6
                                        device pnp 4e.709 off end       # GPIO7
                                        device pnp 4e.a   on  end       # ACPI
                                        device pnp 4e.b   on            # H/W Monitor, FP LED
                                                io  0x60 = 0x290
                                                io  0x62 = 0
                                                irq 0x70 = 0
                                        end
                                        device pnp 4e.d   off end       # WDT1
                                        device pnp 4e.e   off end       # CIR Wake-up
                                        device pnp 4e.f   off end       # Push-pull/Open-drain
                                        device pnp 4e.14  off end       # Port 80 UART
                                        device pnp 4e.16  off end       # Deep Sleep
                                end
直接换掉生成的
代码:
subsystemid 0x1462 0x7817

autoport 没有生成 superio 代码的功能,这块还是要自己做。

h81m-p33 的 superio 初始化是在 bootblock.c 的 mainboard_config_superio 实现的,目的是把串口打开,从而可以利用串口获取调试信息。而 devicetree.cb 里面的 superio 是 ramstage 初始化 superio 用的,属于后续细化的操作。

h81m-p33 的 lpc 下面没有 subsystemid 这行,是因为它的 devicetree.cb 在 "device domain 0 on" 那行下面已经有一行 "subsystemid 0x1462 0x7817 inherit", 所以下面节点相同 subsystemid 的那些 "subsystemid 0x1462 0x7817" 都可以省略掉,你可以考虑做相同的简化。“chip superio/nuvoton/nct6779d” 这整块代码的确可以直接贴到 LPC 下,也就是 “device pci 1f.0 on” 这个节点。
那到这一步,移植是已经做完了。
剩下的是帮superiotool debug吧。

你先把代码编译通过,把 coreboot 刷到主板的 flash (记得备份原有的flash的内容),看到主板正常启动才叫把移植做完。
debug superiotool 的事是另一个工作。

BIOS之前已经搞挂过了。
me_cleaner然后用BIOS自带的M-FLASH刷,刷挂了。
等了一两天的微星JSPI线,才刷回去。
官网下载的BIOS刷回去可以用。
BIOS芯片里DUMP出来的二进制文件和官网下载的BIOS比有什么区别吗?

superio.asl里还有
代码:
/* SPDX-License-Identifier: GPL-2.0-only */

#include <drivers/pc80/pc/ps2_controller.asl>
这个也要填一下吧?
看起来是初始化PS2控制器,B85也有PS2口。


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 维格纳朋友 - 02-08-2023

代码:
make CPUS=$(nproc)                            
Updating git submodules.
   SCONFIG    mainboard/msi/b85m-e45/devicetree.cb
line 24: lapic: syntax error
make: *** [Makefile.inc:638: build/mainboard/msi/b85m-e45/static.c] Error 1

.zip   b85m-e45.zip (大小: 4.36 KB / 下载: 1)
编译报错。


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - vimacs - 02-08-2023

(02-08-2023, 11:59 AM)维格纳朋友 提到: BIOS之前已经搞挂过了。
me_cleaner然后用BIOS自带的M-FLASH刷,刷挂了。
等了一两天的微星JSPI线,才刷回去。
官网下载的BIOS刷回去可以用。
BIOS芯片里DUMP出来的二进制文件和官网下载的BIOS比有什么区别吗?

这个我不知道。coreboot社区一般都用flashrom读写,flashrom是直接操作flash芯片的裸数据。主板官方的工具处理的是什么格式的数据我就不清楚了。

(02-08-2023, 11:59 AM)维格纳朋友 提到: superio.asl里还有
代码:
/* SPDX-License-Identifier: GPL-2.0-only */

#include <drivers/pc80/pc/ps2_controller.asl>
这个也要填一下吧?
看起来是初始化PS2控制器,B85也有PS2口。

这个好像就是autoport生成出来的吧,大多数主板都是这样的,没什么特殊需求就不要改。这里的PS/2口不只是以前用来接键鼠的那个物理接口,只要是通过同一种软件操作的接口都要在ACPI中指定,包括大多数笔记本电脑的键盘。


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 维格纳朋友 - 02-08-2023

编译报错咋整啊?🙁
现在笔记本蛮多都用i2c总线了吧。


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - vimacs - 02-08-2023

(02-08-2023, 01:49 PM)维格纳朋友 提到:
代码:
make CPUS=$(nproc)                            
Updating git submodules.
   SCONFIG    mainboard/msi/b85m-e45/devicetree.cb
line 24: lapic: syntax error
make: *** [Makefile.inc:638: build/mainboard/msi/b85m-e45/static.c] Error 1

编译报错。

这个错误我不太清楚。我已经很久没搞coreboot了,所以autoport生成的代码也是根据几年前的代码做的(暂时没太多精力搞这个了)。 你可以把 "device cpu_cluster 0x0 on" 和 "chip cpu/intel/haswell" 这些代码换成其他主板的:
代码:
    chip cpu/intel/haswell
        device cpu_cluster 0 on ops haswell_cpu_bus_ops end
    end
这些代码所有Haswell的板子应该是一样的。

(02-08-2023, 02:53 PM)维格纳朋友 提到: 编译报错咋整啊?🙁
现在笔记本蛮多都用i2c总线了吧。

只要是通过同一套软件方式操作的(如果你要写操作系统或者bootloader可以参考[1]),在软件层面上都认为它是PS/2设备。之所以要写进ACPI是因为这些设备不像PCI,USB接口的设备一样可以枚举。

[1] https://wiki.osdev.org/%228042%22_PS/2_Controller#PS.2F2_Controller_IO_Ports


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 维格纳朋友 - 02-08-2023

我打算把设备树里的代码换成h81的,但是pci 01.0 PEG在lspci里看不见。
其他的应该都是OK的。
这个pci设备看不见是正常的?


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - vimacs - 02-08-2023

(02-08-2023, 03:40 PM)维格纳朋友 提到: 我打算把设备树里的代码换成h81的,但是pci 01.0 PEG在lspci里看不见。
其他的应该都是OK的。
这个pci设备看不见是正常的?

你可以参考一下其他主板的代码,但是设备树要按照实际主板的情况来写。
PEG是指直接连接到CPU的那个PCIe接口,如果那个接口没插设备的话,lspci是看不到的。这个是后续要细化的内容之一。但是,移植coreboot到主板的最重要的还是先编译出固件并在主板上运行起来。


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 维格纳朋友 - 02-08-2023

(02-08-2023, 03:51 PM)vimacs 提到:
(02-08-2023, 03:40 PM)维格纳朋友 提到: 我打算把设备树里的代码换成h81的,但是pci 01.0 PEG在lspci里看不见。
其他的应该都是OK的。
这个pci设备看不见是正常的?

你可以参考一下其他主板的代码,但是设备树要按照实际主板的情况来写。
PEG是指直接连接到CPU的那个PCIe接口,如果那个接口没插设备的话,lspci是看不到的。这个是后续要细化的内容之一。但是,移植coreboot到主板的最重要的还是先编译出固件并在主板上运行起来。

首先得编译通过,然而我现在还在编译报错,令人感慨😭
我发现h81没有acpi_tables.c,而生成的文件里有,是不是这玩意也被弃用了?


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - vimacs - 02-08-2023

(02-08-2023, 04:01 PM)维格纳朋友 提到: 首先得编译通过,然而我现在还在编译报错,令人感慨😭
我发现h81没有acpi_tables.c,而生成的文件里有,是不是这玩意也被弃用了?

没有被弃用,但是可以不用,看起来也不太需要。


RE: [讨论] 如何移植coreboot到Skylake及更新的Intel主板? - 维格纳朋友 - 02-08-2023

(02-08-2023, 04:25 PM)vimacs 提到:
(02-08-2023, 04:01 PM)维格纳朋友 提到: 首先得编译通过,然而我现在还在编译报错,令人感慨😭
我发现h81没有acpi_tables.c,而生成的文件里有,是不是这玩意也被弃用了?

没有被弃用,但是可以不用,看起来也不太需要。

貌似是在Kconfig里被导入了。
似乎主线代码自己做了这部分。

那我直接删除acpi_tables.c了。