OpenWrt 25.14添加Qlogic QL41系列网卡驱动

OpenWrt 25.14添加Qlogic QL41系列网卡驱动

· json · rss
Subscribe:

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

到这差不多就结束了,关键模块就装完了,到时候卡到了测试一下。