有 v 友研究过给网卡刷 rom 吗?
我买过 3 个不同品牌的 rtl8126 网卡,全都不支持 uefi 模式下的 pxe 启动,我想把 Realtek 官方的”UEFI UNDI Driver (X64/ARM)“驱动刷入网卡的 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 文件自动加载从 Realtek 官网下载的 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
@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 中还能通过
并不是所有 .efi 结尾的文件都是 uefi 启动用的,设备的 DXE 驱动也是 .efi 结尾的,比如 UEFI 的串口设备驱动名字叫作 PciSioSerialDxe.efi 和 TerminalDxe.efi (这两个要自己编译 edk2 的 MdeModulePkg 模块得到),加载这两个就能在 UEFI Shell 中获得串口控制台。
看下这个工具行不行,能刷 EFUSE / EEPROM https://github.com/redchenjs/rtnicpg 我用它改过 mac 地址。博文 https://www.jianyun.run/posts/modify-rtl8125-mac/