有 v 友研究过给网卡刷 rom 吗?

2 月 7 日
 wniming

我买过 3 个不同品牌的 rtl8126 网卡,全都不支持 uefi 模式下的 pxe 启动,我想把 Realtek 官方的"UEFI UNDI Driver (X64/ARM)"驱动(下载解压后会得到 RtkUndiDxe.efi )刷入网卡的 rom ,但不知道怎么操作,ai 给的方法试了都不管用,也搜不到靠谱的教程,有有这方面经验的 v 友能指导一下吗?

目前我通过一种变通的方式实现了 rtl8126 网卡的 pxe 启动,步骤如下:

在 u 盘上创建一个 efi 分区,把 fedora 的 edk2-shell-x64 包的 /usr/share/edk2/ovmf/Shell.efi 文件拷贝到 efi 分区的 EFI/Boot 目录并且重命名为 bootx64.efi ,然后在 efi 分区的根目录创建 startup.nsh 文件自动加载 RtkUndiDxe.efi ,再通过主板板载的 rtl8125 网卡的 pxe 功能从 tftp 服务器加载 ipxe.efi ,然后就可以通过 ipxe 来从 rtl8126 网卡把 Fedora 系统安装在 iscsi 存储上并从 iscsi 存储上启动。

这么搞相比直接支持 pxe 启动的网卡来说太麻烦了,我知道新出的 rtl8127 网卡是支持 uefi 模式下的 pxe 启动的,但价格是 rtl8126 的 3 倍多,对我来说 5G 速率的网卡就够我用了,不想多花钱上 rtl8127 网卡,我目前已经把 rtl8126 的网卡的 rom 提取出来了,用如下命令:

d@d-macbookair:~/Downloads$ EfiRom -f 0x10EC -i 0x8126 -e RtkUndiDxe.efi
d@d-macbookair:~/Downloads$ 
d@d-macbookair:~/Downloads$ rom-parser RtkUndiDxe.rom 
Valid ROM signature found @0h, PCIR offset 1ch
        PCIR: type 3 (EFI), vendor: 10ec, device: 8126, class: 000000
        PCIR: revision 3, vendor revision: 0
                EFI: Signature Valid, Subsystem: Boot, Machine: X64
        Last image
d@d-macbookair:~/Downloads$ 

但就是不知道如何把 RtkUndiDxe.rom 刷入网卡的 rom

3414 次点击
所在节点    硬件
3 条回复
yihy8023
2 月 7 日
看下这个工具行不行,能刷 EFUSE / EEPROM https://github.com/redchenjs/rtnicpg
我用它改过 mac 地址。博文 https://www.jianyun.run/posts/modify-rtl8125-mac/
yihy8023
2 月 7 日
RtkUndiDxe.efi 不能刷到网卡吧,efi 是引导 uefi 启动的
wniming
2 月 7 日
@yihy8023 RtkUndiDxe.efi 是 uefi 的 DXE 驱动,我是想把从 RtkUndiDxe.efi 提取出来的 RtkUndiDxe.rom 刷入网卡,这个 rom 就类似 ipxe 项目的 virtio 网卡的 rom:

d@develop:~$ rom-parser /usr/share/ipxe/qemu/efi-virtio.rom
Valid ROM signature found @0h, PCIR offset 1ch
PCIR: type 0 (x86 PC-AT), vendor: 1af4, device: 1000, class: 020000
PCIR: revision 3, vendor revision: 1
Valid ROM signature found @17400h, PCIR offset 1ch
PCIR: type 3 (EFI), vendor: 1af4, device: 1000, class: 000000
PCIR: revision 0, vendor revision: 0
EFI: Signature Valid, Subsystem: Boot, Machine: X64
Last image
d@develop:~$

efi-virtio.rom 这给是 qemu 源码中写死的默认会加载的 vritio 网卡的 rom:

d@f42c:~/src/qemu$ grep -C 3 efi-virtio.rom master/hw/virtio/virtio-net-pci.c
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass);

k->romfile = "efi-virtio.rom";
k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
k->device_id = PCI_DEVICE_ID_VIRTIO_NET;
k->revision = VIRTIO_PCI_ABI_VERSION;
d@f42c:~/src/qemu$

在 libvirt 中还能通过<rom file=''/>这段配置来指定别的 rom 文件。

并不是所有 .efi 结尾的文件都是 uefi 启动用的,设备的 DXE 驱动也是 .efi 结尾的,比如 UEFI 的串口设备驱动名字叫作 PciSioSerialDxe.efi 和 TerminalDxe.efi (这两个要自己编译 edk2 的 MdeModulePkg 模块得到),加载这两个就能在 UEFI Shell 中获得串口控制台。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1191425

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX