当前位置: 首页 > news >正文

openwrt 23.05编译intel igb5.19.4驱动

  1. 修改内核配置
    make kernel_menuconfig
    在这里插入图片描述
    关闭高端内存

在这里插入图片描述
修改内核参数后,要重新编译内核,否则会出莫名错误

make target/linux/clean
make target/linux/install

带上 -j 参数速度会快,如:

-j $(($(nproc)+1)) V=sc
  1. 下载驱动包,修改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
  1. 驱动目录会缺少一个文件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_ */
  1. 替换模块
rmmod igb && insmod /lib/modules/5.15.167/igb_im.ko

使用WinSCP上传,方便。

http://www.xdnf.cn/news/1239049.html

相关文章:

  • 在Ansys Mechanical中对磨损进行建模
  • nestjs @Param 从入门到精通
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • WebMvc自动配置流程讲解
  • 研报复现|史蒂夫·路佛价值选股法则
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • Java ++i 与 i++ 底层原理
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3
  • LCL滤波器及其电容电流前馈有源阻尼设计软件【LCLAD_designer】
  • Linux网络编程 --- 多路转接select
  • 07.config 命令实现动态修改配置和慢查询
  • Redis——常用指令汇总指南(三)(哈希类型)
  • Timer实现定时调度的原理是什么?
  • ORA-12514:TNS: 监听程序当前无法识别连接描述符中请求的服务
  • 【2025/08/03】GitHub 今日热门项目
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • 计算机网络(TCP篇)
  • io_setup系统调用及示例
  • C++编译过程与GDB调试段错误和死锁问题
  • 【前端:Html】--1.2.基础语法
  • 源代码本地安装funasr
  • 【Linux网络编程基础--socket地址API】
  • 01数据结构-时间复杂度和空间复杂度
  • FreeRTOS源码分析三:列表数据结构
  • 线程锁-互斥、自旋、读写、原子操作、线程池
  • 江协科技STM32 14-1 WDG看门狗
  • Python篇---环境变量软件安装
  • 【视频内容创作】PR的关键帧动画
  • C++23 Concepts:用类型约束重构泛型编程的终极方案
  • k8s+isulad 国产化技术栈云原生技术栈搭建2-crictl