我买过 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
顺带提一下,绿联的8126网卡有 128KB 的 Expansion ROM,并且出场时已经刷入了 5G PXE ROM Code,支持在 BIOS 模式下的 PXE 启动,但 UEFI 模式下的 PXE 启动需要刷主板 BIOS 或网卡的 rom,而希力威视的8126网卡没有Expansion ROM,通过对比绿联网卡和希力威视网卡的lspci输出可以确认这一点:
root@f42i:~# diff 5gNet_xlws 5gNet_ugreen
9,10c9,11
< Region 2: Memory at fc200000 (64-bit, non-prefetchable) [size=64K]
< Region 4: Memory at fc210000 (64-bit, non-prefetchable) [size=16K]
---
> Region 2: Memory at fc220000 (64-bit, non-prefetchable) [size=64K]
> Region 4: Memory at fc230000 (64-bit, non-prefetchable) [size=16K]
> Expansion ROM at fc200000 [disabled] [size=128K]
75c76
< Capabilities: [170 v1] Device Serial Number 01-00-00-00-68-4c-e0-00
---
> Capabilities: [170 v1] Device Serial Number c0-b4-bc-f7-1f-6c-00-00
root@f42i:~#
绿联网卡的京东链接: https://item.jd.com/100233811893.html
希力威视网卡的京东链接:https://item.jd.com/100212105508.html
发现一个有意思的事情,绿联的rtl8126网卡的rom里包含rtl8127网卡的uefi驱动,这个驱动在rtl8126网卡里是完全没用的,难道他们是为了懒省事所以给rtl8126网卡和rtl8127网卡用同一个rom吗?
root@f42i:~# rom-parser r8126.rom
Valid ROM signature found @0h, PCIR offset 1ch
PCIR: type 3 (EFI), vendor: 10ec, device: 8127, class: 000000
PCIR: revision 3, vendor revision: 0
EFI: Signature Valid, Subsystem: Boot, Machine: X64
Valid ROM signature found @13800h, PCIR offset 40h
PCIR: type 0 (x86 PC-AT), vendor: 10ec, device: 8126, class: 020000
PCIR: revision 3, vendor revision: 201
Last image
root@f42i:~#
1
yihy8023 2 天前 看下这个工具行不行,能刷 EFUSE / EEPROM https://github.com/redchenjs/rtnicpg
我用它改过 mac 地址。博文 https://www.jianyun.run/posts/modify-rtl8125-mac/ |
2
yihy8023 2 天前
RtkUndiDxe.efi 不能刷到网卡吧,efi 是引导 uefi 启动的
|
3
wniming OP @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 中获得串口控制台。 |