一、问题现象
日志报错如下所示:
kernel: bnx2x 0000:04:00.0: Direct firmware load for bnx2x/bnx2x-e2-7.13.15.0.fw failed with error -2
kernel: bnx2x: [bnx2x_init_firmware:13480(ethB04-0)]Can't load firmware file bnx2x/bnx2x-e2-7.13.15.0.fw
kernel: bnx2x: [bnx2x_func_hw_init:6004(ethB04-0)]Error loading firmware
kernel: bnx2x: [bnx2x_nic_load:2733(ethB04-0)]HW init failed, aborting
...
network: [FAILED]
从打印的内容来看,在bnx2x驱动在初始化的时候由于缺少bnx2x-e2-7.13.15.0.fw固件,导致无法加载成功,进而network服务无法正常运行。
二、问题解决
bnx2x驱动加载的固件所在的位置为:/lib/firmware/bnx2x
bnx2x-e1-6.0.34.0.fw bnx2x-e1-7.12.30.0.fw bnx2x-e1h-6.0.34.0.fw bnx2x-e1h-7.12.30.0.fw bnx2x-e2-6.0.34.0.fw bnx2x-e2-7.12.30.0.fw
bnx2x-e1-6.2.5.0.fw bnx2x-e1-7.13.1.0.fw bnx2x-e1h-6.2.5.0.fw bnx2x-e1h-7.13.1.0.fw bnx2x-e2-6.2.5.0.fw bnx2x-e2-7.13.1.0.fw
bnx2x-e1-6.2.9.0.fw bnx2x-e1-7.2.16.0.fw bnx2x-e1h-6.2.9.0.fw bnx2x-e1h-7.2.16.0.fw bnx2x-e2-6.2.9.0.fw bnx2x-e2-7.2.16.0.fw
bnx2x-e1-7.0.20.0.fw bnx2x-e1-7.2.51.0.fw bnx2x-e1h-7.0.20.0.fw bnx2x-e1h-7.2.51.0.fw bnx2x-e2-7.0.20.0.fw bnx2x-e2-7.2.51.0.fw
bnx2x-e1-7.0.23.0.fw bnx2x-e1-7.8.17.0.fw bnx2x-e1h-7.0.23.0.fw bnx2x-e1h-7.8.17.0.fw bnx2x-e2-7.0.23.0.fw bnx2x-e2-7.8.17.0.fw
bnx2x-e1-7.0.29.0.fw bnx2x-e1-7.8.19.0.fw bnx2x-e1h-7.0.29.0.fw bnx2x-e1h-7.8.19.0.fw bnx2x-e2-7.0.29.0.fw bnx2x-e2-7.8.19.0.fw
bnx2x-e1-7.10.51.0.fw bnx2x-e1-7.8.2.0.fw bnx2x-e1h-7.10.51.0.fw bnx2x-e1h-7.8.2.0.fw bnx2x-e2-7.10.51.0.fw bnx2x-e2-7.8.2.0.fw
下载所需要的bnx2x-e2-7.13.15.0.fw固件,将其拷贝至/lib/firmware/bnx2x/文件夹下,重启网络服务即可;
三、补充知识
-
最新的固件下载地址
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/ 和内核代码一样,不同的固件也一直在维护更新
-
lib/firmware文件来源
系统中该文件夹的内容来源于操作系统镜像的rootfs文件系统,存储于squashfs.img中;
-
驱动加载固件的流程
驱动在初始化的时候,会首先从用户空间选择对应的固件进行加载,以bnx2x驱动为例函数调用的顺序为:
bnx2x_func_hw_init->bnx2x_init_firmware->request_firmware
默认会将要加载的固件版本加载到driver中,在初始化设备时根据定义的版本去加载对应的固件;