替换 bnx2 驱动程序¶
bnx2 驱动程序用于 Broadcom 的 NetXtreme II(1G,不是 10G)系列网卡。
信息来源¶
- 数据手册 [^1]
- Linux bnx2 驱动程序 [^2]
状态¶
我已确认以下网卡可以工作:
- IBM 39Y6070(BCM5708)
- IBM 42C1782(BCM5709)[^3] [^4]
git 仓库位于:https://git.ipxe.org/people/dewyatt/ipxe.git [^5]
当前目标¶
- 某种无固件(firmware-less)的解决方案
已完成¶
- 08/02/2012 5706 支持,也许
- 08/01/2012 5709 支持
- 07/31/2012 以 10/100/1000 链路接通
- 07/22/2012 接收
- 07/13/2012 发送及发送完成
- 06/08/2012 链路接通/链路状态
- 06/01/2012 加载 MIPS 固件
- 05/22/2012 加载 RV2P 固件,转储 NVRAM
- 05/16/2012 成功执行复位,MII 读/写
- 05/08/2012 骨架就位,能够从网卡读取寄存器
测试环境¶
我目前的测试网卡是一块 39y6070。
我的开发机运行 Ubuntu,通过一条 null modem 线缆与我的测试机相连。我使用 GtkTerm 作为串口终端。
我发现把测试机的电源按钮引线到桌面上方非常有用。我用了一些多余的导线、几根母头跳线(连接到主板上的排针),以及一个从旧手机上拆下来的按钮。这样,我只需按一下离鼠标几英寸远的按钮,就能给测试机重新上电。
固件¶
NetXtreme II 系列网卡需要由驱动程序加载专有固件才能工作。
当前的 Linux bnx2 驱动程序使用两个独立的固件文件 [^6],一个用于 RV2P 固件,一个用于 MIPS 固件。
MIPS 固件文件包含 5 个不同的固件,分别对应不同的 CPU(一块 bnx2 网卡中总共有 6 个 32 位 MIPS CPU)。
你可以使用 gsoc/bnx2/fw_info 工具打印固件文件的信息。下面是一个例子:
[daniel@daniel-pc gsoc]$ ./fw_info bnx2_bnx2-mips-06-6.2.3.fw
MIPS firmware
COM (Completion Processor):
start addr: 0x08000118
.text:
addr : 0x08000000
len : 0x00004A68
offset: 0x000000C8
.data:
addr : 0x00000000
len : 0x00000000
offset: 0x00000000
.rodata:
addr : 0x08004A68
len : 0x00000014
offset: 0x00004B30
...
你可以使用 gsoc/bnx2/fw_elf 工具把 MIPS 固件提取为标准 ELF,以便反汇编。
[^1]: NetXtreme II Programmer's Reference Guide
[^2]: Linux bnx2 git repository
[^3]: 物理端口中只能使用 1 个
[^4]: 有一个关于 MII reset 失败的警告