openwrt 23.05编译intel igb5.19.4驱动
- 修改内核配置
make kernel_menuconfig
关闭高端内存
修改内核参数后,要重新编译内核,否则会出莫名错误
make target/linux/clean
make target/linux/install
带上 -j 参数速度会快,如:
-j $(($(nproc)+1)) V=sc
- 下载驱动包,修改Makefile
# SPDX-License-Identifier: GPL-2.0
# Copyright(c) 2007 - 2025 Intel Corporation.ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m := igb.oigb-y := igb_main.o \e1000_api.o \igb_ethtool.o \igb_hwmon.o \e1000_mbx.o \e1000_mac.o \e1000_manage.o \e1000_nvm.o \igb_param.o \e1000_phy.o \igb_procfs.o \igb_vmdq.o \e1000_82575.o \e1000_i210.o \e1000_base.o \kcompat.oigb-$(CONFIG_DEBUG_FS) += igb_debugfs.o
igb-$(CONFIG_PTP_1588_CLOCK) += igb_ptp.o#添加 Spectre 缓解兼容
EXTRA_CFLAGS += -mindirect-branch=thunk-extern -mindirect-branch-register -fno-jump-tableselse
# OpenWrt-specific cross-compilation setup
DRIVER := igb# 设置 OpenWrt 路径 - 使用绝对路径!
OPENWRT_ROOT ?= /home/a/openwrt-23.05.5
STAGING_DIR ?= $(OPENWRT_ROOT)/staging_dir
export STAGING_DIR# 1. 自动检测工具链路径
TOOLCHAIN_DIR := $(wildcard $(STAGING_DIR)/toolchain-*/bin)
ifeq ($(TOOLCHAIN_DIR),)$(error Cannot find toolchain directory in $(STAGING_DIR))
endif# 2. 直接设置正确的交叉编译器前缀
CROSS_COMPILE := $(TOOLCHAIN_DIR)/x86_64-openwrt-linux-musl-# 3. 修正内核路径 - 手动指定正确的内核路径
KERNEL_VER := /home/a/openwrt-23.05.5/build_dir/target-x86_64_musl/linux-x86_64/linux-5.15.167# 验证内核路径是否存在
ifeq ($(wildcard $(KERNEL_VER)/Makefile),)$(error Cannot find kernel directory at $(KERNEL_VER))
endif# 设置编译环境
export ARCH := x86_64
export CROSS_COMPILE
export KSRC := $(KERNEL_VER)# 显示检测到的配置
$(info === OpenWrt Cross-Compilation Environment ===)
$(info OPENWRT_ROOT: $(OPENWRT_ROOT))
$(info STAGING_DIR: $(STAGING_DIR))
$(info TOOLCHAIN_DIR: $(TOOLCHAIN_DIR))
$(info CROSS_COMPILE: $(CROSS_COMPILE))
$(info KERNEL_VER: $(KSRC))
$(info ===========================================)# 主编译目标
all:@echo "Building igb driver for OpenWrt..."@+$(MAKE) EXTRA_CFLAGS="-fno-pic -fno-pie" -C $(KSRC) M=$(PWD) modulesclean:@echo "Cleaning build files..."@+$(MAKE) -C $(KSRC) M=$(PWD) clean@-rm -f *.ko *.o .*.cmd.PHONY: all cleanendif
3. 准备内核
cd ~/openwrt-23.05.5
make target/linux/prepare
make target/linux/compile
- 驱动目录会缺少一个文件kcompat_generated_defs.h,只需要在ubuntu的环境下在src目录make一下就出来,也可以手动建立:
/* Autogenerated for KSRC=/lib/modules/5.15.0-151-generic/build via kcompat-generator.sh */
#ifndef _KCOMPAT_GENERATED_DEFS_H_
#define _KCOMPAT_GENERATED_DEFS_H_
#define HAVE_DEVLINK_ESWITCH_OPS_EXTACK 1
#define HAVE_DEVLINK_FLASH_UPDATE_PARAMS 1
#define HAVE_DEVLINK_FLASH_UPDATE_PARAMS_FW 1
#define HAVE_DEVLINK_FLASH_UPDATE_PARAMS_OVERWRITE_MASK 1
#define HAVE_DEVLINK_HEALTH 1
#define HAVE_DEVLINK_HEALTH_OPS_EXTACK 1
#define HAVE_DEVLINK_INFO_DRIVER_NAME_PUT 1
#define HAVE_DEVLINK_PARAMS 1
#define HAVE_DEVLINK_PARAMS_PUBLISH 1
#define HAVE_DEVLINK_PORT_NEW 1
#define HAVE_DEVLINK_PORT_SPLIT 1
#define HAVE_DEVLINK_PORT_SPLIT_EXTACK 1
#define HAVE_DEVLINK_PORT_SPLIT_IN_OPS 1
#define HAVE_DEVLINK_PORT_TYPE_ETH_HAS_NETDEV 1
#define HAVE_DEVLINK_REGIONS 1
#define HAVE_DEVLINK_REGION_OPS_SNAPSHOT 1
#define HAVE_DEVLINK_REGION_OPS_SNAPSHOT_OPS 1
#define HAVE_DEVLINK_RELOAD_ENABLE_DISABLE 1
#define NEED_DEVLINK_FMSG_DUMP_SKB 1
#define NEED_DEVLINK_FMSG_PUT 1
#define NEED_DEVLINK_RESOURCES_UNREGISTER_NO_RESOURCE 1
#define NEED_DEVLINK_TO_DEV 1
#define NEED_DEVLINK_UNLOCKED_RESOURCE 1
#define NEED_DEVL_HEALTH_REPORTER_CREATE 1
#define NEED_DEVL_LOCK 1
#define NEED_DEVL_PARAMS_REGISTER 1
#define NEED_DEVL_PORT_REGISTER 1
#define NEED_DEVL_REGION_CREATE 1
#define NEED_DEVL_REGISTER 1
#define NEED_DEVL_RESOURCE_REGISTER 1
#define HAVE_DEVLINK_PORT_FLAVOUR_PCI_SF 1
#define HAVE_DEVLINK_RELOAD_ACTION_AND_LIMIT 1
#define HAVE_NDO_BRIDGE_SETLINK_EXTACK 1
#define HAVE_NDO_ETH_IOCTL 1
#define HAVE_NDO_FDB_ADD_EXTACK 1
#define HAVE_NDO_FDB_ADD_VID 1
#define HAVE_NDO_GET_DEVLINK_PORT 1
#define HAVE_NDO_SETUP_TC_REMOVE_TC_TO_NETDEV 1
#define HAVE_NETDEV_MIN_MAX_MTU 1
#define NEED_NETIF_NAPI_ADD_NO_WEIGHT 1
#define NEED_XDP_FEATURES 1
#define HAVE_INCLUDE_BITFIELD 1
#define NEED_DPLL_NETDEV_PIN_SET 1
#define HAVE_ETHTOOL_COALESCE_EXTACK 1
#define HAVE_ETHTOOL_GET_FEC_STATS_OPS 1
#define HAVE_ETHTOOL_FLOW_RSS 1
#define HAVE_ETHTOOL_LINK_MODE_FEC_NONE_BIT 1
#define NEED_NO_NETDEV_PROG_XDP_WARN_ACTION 1
#define HAVE_FLOW_BLOCK_API 1
#define HAVE_FLOW_DISSECTOR_KEY_CVLAN 1
#define HAVE_TC_FLOW_INDIR_BLOCK_CLEANUP 1
#define HAVE_TC_FLOW_INDIR_DEV 1
#define HAVE_TC_FLOW_RULE_INFRASTRUCTURE 1
#define HAVE_TCF_EXTS_FOR_EACH_ACTION 1
#define HAVE_TCF_EXTS_HAS_ACTION 1
#define HAVE_TCF_BLOCK 1
#define HAVE_TC_CB_AND_SETUP_QDISC_MQPRIO 1
#define HAVE_TC_INDIR_BLOCK 1
#define HAVE_TC_SETUP_CLSFLOWER 1
#define HAVE_TCF_MIRRED_DEV 1
#define HAVE_TCF_MIRRED_EGRESS_REDIRECT 1
#define HAVE_TCF_MIRRED_REDIRECT 1
#define HAVE_CDEV_DEVICE 1
#define HAVE_STREAM_OPEN 1
#define NEED_CLASS_CREATE_WITHOUT_OWNER 1
#define HAVE_GNSS_MODULE 1
#define HAVE_POLL_T 1
#define NEED_KMEM_CACHE_ALLOC_LRU 1
#define HAVE_GENEVE_TYPE 1
#define HAVE_GRETAP_TYPE 1
#define HAVE_VXLAN_TYPE 1
#define HAVE_PER_VF_MSIX_SYSFS 1
#define HAVE_STRUCT_PCI_DEV_PTM_CAP 1
#define HAVE_STRUCT_PCI_DEV_PTM_ENABLED 1
#define HAVE_PTP_CANCEL_WORKER_SYNC 1
#define HAVE_PTP_CLOCK_DO_AUX_WORK 1
#define HAVE_PTP_CLOCK_INFO_ADJFINE 1
#define HAVE_PTP_CLOCK_INFO_GETTIME64 1
#define HAVE_PTP_CLOCK_INFO_GETTIMEX64 1
#define HAVE_PTP_FIND_PIN_UNLOCKED 1
#define NEED_DIFF_BY_SCALED_PPM 1
#define HAVE_PTP_TX_ONESTEP_P2P 1
#define HAVE_PTP_SYS_OFFSET_EXTENDED_IOCTL 1
#define HAVE_PTP_CROSSTIMESTAMP 1
#define HAVE_STDDEF_OFFSETTOEND 1
#define HAVE_PASID_SUPPORT 1
#define HAVE_LMV1_SUPPORT 1
#define HAVE_X86_STEPPING 1
#define HAVE_PCI_ENABLE_PCIE_ERROR_REPORTING 1
#define NEED_CLEANUP_API 1
#define NEED___STRUCT_SIZE 1
#define HAVE_COMPLETION_RAW_SPINLOCK 1
#define NEED_DIM_END_SAMPLE_BY_POINTER 1
#define NEED_FIND_NEXT_BIT_WRAP 1
#define HAVE_HWMON_DEVICE_REGISTER_WITH_INFO 1
#define HAVE_IOMMU_DEV_FEAT_AUX 1
#define HAVE_STRUCT_STATIC_KEY_FALSE 1
#define NEED_LIST_COUNT_NODES 1
#define NEED_DIV_U64_ROUND_UP 1
#define NEED_ROUNDUP_U64 1
#define HAVE_MDEV_GET_DRVDATA 1
#define HAVE_LINUX_REFCOUNT_HEADER 1
#define NEED_SCHED_PARAM 1
#define HAVE_SKB_CSUM_IS_SCTP 1
#define NEED_NAPI_ALLOC_SKB 1
#define NEED_STR_ENABLED_DISABLED 1
#define HAVE_STRING_HELPERS_H 1
#define HAVE_TRACE_ENABLED_SUPPORT 1
#define HAVE_U64_STATS_FETCH_BEGIN_IRQ 1
#define HAVE_U64_STATS_FETCH_RETRY_IRQ 1
#define NEED_U64_STATS_SET 1
#define HAVE_XARRAY_API 1
#define HAVE_TC_FLOWER_ENC 1
#define NEED_XSK_BUFF_DMA_SYNC_FOR_CPU_NO_POOL 1
#define HAVE_ASSIGN_STR_2_PARAMS 1
#define HAVE_LINUX_BITS_HEADER 1
#endif /* _KCOMPAT_GENERATED_DEFS_H_ */
- 替换模块
rmmod igb && insmod /lib/modules/5.15.167/igb_im.ko
使用WinSCP上传,方便。