跳转至

替换 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 失败的警告

[^5]: iPXE bnx2 git repository webview

[^6]: bnx2 firmware git repository