OpenWrt 25.14添加Qlogic QL41系列网卡驱动
OpenWrt 25.14添加Qlogic QL41系列网卡驱动
About
这沟槽的网卡也是很逆天了,目前不在openwrt中主线提供qede只有第三方编译的版本才提供,所以原生op无法驱动,使用源码编译会失去原生的包管理器,因为签名对不上。
原生openwrt sdk交叉编译环境中内核也是被裁减过的,不包含关键的qed和qede驱动,需要从相同Kernel主线中拉Qlogic驱动,然后编译出apk装进去
一、下载Linux源码,25.14是6.12.78 内核,所以对应主线6.12,解压找到drivers/net/ethernet/qlogic,把底下的所有文件复制出来备用。
wget https://github.com/torvalds/linux/archive/refs/tags/v6.12.zip
二、下载openwrt交叉编译环境,选择相同的环境sdk,下载解压它,系统需要ubuntu 24.04 lts,当然debian系都差不多,所以没区别,环境可以看官方文档
wget https://archive.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-sdk-25.12.4-x86-64_gcc-14.3.0_musl.Linux-x86_64.tar.zst
三、创建驱动源码目录
mkdir -p package/kmod-qed/ mkdir -p package/kmod-qede/ mkdir -p qlogic-drivers/qlogic #把从内核主线里面的驱动全部解压到这个目录
四、编写两个模块的Makefile
# vim package/kmod-qed/Makefile 写入 include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=kmod-qed PKG_VERSION:=6.12.87 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk define KernelPackage/qed SUBMENU:=Network Devices TITLE:=QLogic QED 25/40/100Gb core driver DEPENDS:=@PCI_SUPPORT +kmod-lib-zlib-inflate +kmod-lib-crc8 FILES:=$(PKG_BUILD_DIR)/qed.ko AUTOLOAD:=$(call AutoProbe,qed) endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR) cp -r /home/snicoe/qlogic-drivers/qlogic/qed/* $(PKG_BUILD_DIR)/ echo 'ccflags-y += -DCONFIG_QED=1 -DCONFIG_QED_LL2=1 -DCONFIG_QED_L2=1 -DCONFIG_QED_SRIOV=1 -DCONFIG_QED_RDMA=1 -DCONFIG_QED_ROCE=1 -DCONFIG_QED_IWARP=1 -DCONFIG_QED_ISCSI=1 -DCONFIG_QED_FCOE=1 -DCONFIG_QED_OOO=1 -DCONFIG_QED_NVMETCP=1 -Wno-missing-prototypes -Wno-missing-declarations' > $(PKG_BUILD_DIR)/Makefile echo 'qed-y := qed_main.o qed_dev.o qed_hw.o qed_cxt.o qed_selftest.o qed_debug.o qed_init_fw_funcs.o qed_init_ops.o qed_int.o qed_mcp.o qed_mng_tlv.o qed_sp_commands.o qed_spq.o qed_l2.o qed_ll2.o qed_sriov.o qed_vf.o qed_ptp.o qed_roce.o qed_rdma.o qed_iwarp.o qed_ooo.o qed_iscsi.o qed_fcoe.o qed_nvmetcp.o qed_nvmetcp_fw_funcs.o qed_devlink.o qed_dcbx.o qed_chain.o' >> $(PKG_BUILD_DIR)/Makefile echo 'obj-m += qed.o' >> $(PKG_BUILD_DIR)/Makefile endef define Build/Compile $(KERNEL_MAKE) M="$(PKG_BUILD_DIR)" modules endef $(eval $(call KernelPackage,qed)) #vim package/kmod-qede/Makefile 写入 include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=kmod-qede PKG_VERSION:=6.12.87 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk define KernelPackage/qede SUBMENU:=Network Devices TITLE:=QLogic QEDE 25/40/100Gb Ethernet driver DEPENDS:=@PCI_SUPPORT +kmod-qed FILES:=$(PKG_BUILD_DIR)/qede.ko AUTOLOAD:=$(call AutoProbe,qede) endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR) cp -r /home/snicoe/qlogic-drivers/qlogic/qede/* $(PKG_BUILD_DIR)/ echo 'ccflags-y += -DCONFIG_QED_LL2=1 -DCONFIG_QED_SRIOV=1 -DCONFIG_QED_DCB=1 -DCONFIG_QED_RDMA=1 -DCONFIG_QED_ROCE=1 -DCONFIG_QED_IWARP=1 -Wno-missing-prototypes -Wno-missing-declarations' > $(PKG_BUILD_DIR)/Makefile echo 'qede-y := qede_main.o qede_filter.o qede_fp.o qede_ethtool.o qede_rdma.o qede_ptp.o qede_dcbnl.o' >> $(PKG_BUILD_DIR)/Makefile echo 'obj-m += qede.o' >> $(PKG_BUILD_DIR)/Makefile endef define Build/Compile $(KERNEL_MAKE) M="$(PKG_BUILD_DIR)" \ KBUILD_EXTRA_SYMBOLS="/home/snicoe/openwrt-sdk-25.12.4-x86-64_gcc-14.3.0_musl.Linux-x86_64/build_dir/target-x86_64_musl/linux-x86_64/symvers/kmod-qed.symvers" \ modules endef $(eval $(call KernelPackage,qede))
五、准备编译
./scripts/feeds update -a ./scripts/feeds install -a make menuconfig
在Kernel modules > Network Devices里面把qed和qede两个模块钩上,然后开始编译这两个模块
make package/kmod-qede/compile V=s make package/kmod-qed/compile V=s
六、安装kmod
理论上你就在bin/targets/x86/64/packages可以找到kmod-qed和kmod-qede这两个模块,scp到openwrt上,先安装qed,因为qede的依赖是qed。
apk add --allow-untrusted kmod-qed-6.12.87-r1.apk apk add --allow-untrusted kmod-qede-6.12.87-r1.apk
到这差不多就结束了,关键模块就装完了,到时候卡到了测试一下。