|
uisrc‑lab‑xlnx ZU2CG开发板移植AIC8800无线驱动踩坑记录|cfg80211未定义、test参数过多 一、环境介绍 • 开发板:F31 2CG(Zynq UltraScale+ MPSoC) • 工程SDK:uisrc‑lab‑xlnx(自制PetaLinux工程) • 内核架构:64位 AArch64 CONFIG_ARM64=y • 驱动:AIC8800 USB无线蓝牙二合一驱动 aic8800_fdrv • 交叉编译器:aarch64‑linux‑gnu‑ ZU2CG Cortex‑A53硬件支持32/64双模式,本项目使用64位内核。移植AIC8800 USB WiFi驱动遇到两个典型问题:make clean报shell错误;ko编译出来但insmod加载失败,大量cfg80211符号undefined。 二、问题现象 现象1 make clean 报错 Plain Text
/bin/sh: line 0: test: too many arguments |
不阻止编译,但属于Makefile的shell语法bug,需要修复。 现象2 MODPOST大量cfg80211未定义警告 Plain Text
WARNING: "cfg80211_rx_unprot_mlme_mgmt" [aic8800_fdrv.ko] undefined!
WARNING: "wiphy_new_nm" [aic8800_fdrv.ko] undefined!
WARNING: "cfg80211_scan_done" [aic8800_fdrv.ko] undefined! |
可以生成aic8800_fdrv.ko,但是板子insmod直接报错符号找不到,驱动无法使用。 三、确认内核是32还是64位(ZU2CG必做) ZU2CG硬件A53是64位CPU,但PetaLinux可以配置成32位内核,不能凭硬件判断,看内核源码的.config最准。 Plain Text
cd ~/uisrc‑lab‑xlnx/sources/kernel
grep -E 'CONFIG_ARM=|CONFIG_ARM64=' .config
|
• 输出 CONFIG_ARM64=y →64位,ARCH=arm64,工具链aarch64‑linux‑gnu‑ • 输出 CONFIG_ARM=y →32位,ARCH=arm,工具链arm‑linux‑gnueabihf‑ 本项目ZU2CG结果:CONFIG_ARM64=y,使用64位编译配置。 开发板端验证: Plain Text
uname -m
#aarch64 代表64位;armv7l代表32位 |
四、根因分析 1. test: too many arguments:AIC8800原始Makefile里旧的shell test判断语法不兼容高版本make,参数解析溢出。 2. cfg80211符号未定义:内核没有把cfg80211/mac80211编译成模块;修改内核配置后没有执行modules_prepare,外部模块拿不到正确符号表。不是架构问题。 五、修复步骤(针对uisrc‑lab‑xlnx ZU2CG) 步骤1 修改aic8800_fdrv/Makefile 1)修复shell test语法报错,找到下面旧代码: Plain Text
ifeq ($(shell test $(VERSION) -lt 4 -a "$(CONFIG_VENDOR_RWNX)" = y ; echo $$?),0)
ccflags-y += -DCONFIG_VENDOR_RWNX_VHT_NO80
endif
|
替换成: Plain Text
ifneq ($(shell [ $(VERSION) -lt 4 ] && [ "$(CONFIG_VENDOR_RWNX)" = "y" ] && echo 1 || echo 0),0)
ccflags-y += -DCONFIG_VENDOR_RWNX_VHT_NO80
endif
|
2)平台段保持ZU2CG 64位配置(不要改成arm) Plain Text
ifeq ($(CONFIG_PLATFORM_XILINX_MPSOC), y)
ARCH := arm64
KDIR ?= /home/uisrc/uisrc‑lab‑xlnx/sources/kernel
CROSS_COMPILE := aarch64‑linux‑gnu‑
endif |
步骤2 PetaLinux内核打开cfg80211、mac80211模块 Plain Text
cd ~/uisrc‑lab‑xlnx
petalinux‑config -c kernel
|
Plain Text Networking support --->
Wireless --->
<M> cfg80211 - wireless configuration API
cfg80211 wireless extensions compatibility
<M> mac80211 - IEEE 802.11 network stack
|
保存退出,编译内核: Plain Text
petalinux‑build -c kernel
|
校验配置是否真正生效: Plain Text
cd sources/kernel
grep -E "CONFIG_CFG80211|CONFIG_MAC80211" .config
|
预期输出: Plain Text
CONFIG_CFG80211=m
CONFIG_MAC80211=m
|
步骤3 modules_prepare(修改内核配置必须执行) Plain Text
cd ~/uisrc‑lab‑xlnx/sources/kernel
make ARCH=arm64 CROSS_COMPILE=aarch64‑linux‑gnu‑ modules_prepare
|
步骤4 编译AIC8800驱动 Plain Text
cd ~/uisrc‑lab‑xlnx/sources/kernel/drivers/net/wireless/aic8800/aic8800_fdrv
make clean
make CONFIG_PLATFORM_XILINX_MPSOC=y
|
六、编译产物校验 1.校验ko架构 Plain Text
file aic8800_fdrv.ko
|
正确输出:ELF 64‑bit LSB relocatable, AArch64 2.检查未定义符号 Plain Text
aarch64‑linux‑gnu‑nm aic8800_fdrv.ko | grep cfg80211
|
没有大量'U'标记的未定义符号即修复完成。 七、ZU2CG开发板加载驱动要点 1、根文件系统需要包含cfg80211、mac80211模块 Plain Text
petalinux‑config -c rootfs
|
勾选:kernel‑modules‑cfg80211,kernel‑modules‑mac80211 2、加载顺序不能颠倒 Plain Text
insmod cfg80211.ko
insmod mac80211.ko
insmod aic8800_fdrv.ko
|
3、固件路径 aic8800固件放到板子 /vendor/etc/firmware;没有该目录可以修改Makefile里的CONFIG_AIC_FW_PATH。 4、USB设备树 ZU2CG使用USB外设,确认PS‑USB控制器在设备树中已经使能,否则识别不到AIC8800硬件。 八、ZU2CG踩坑总结 1. ZU2CG(MPSoC)硬件是A53‑64,但内核可以跑32位,一定看内核.config,不要想当然。 2. cfg80211符号未定义,绝大多数情况不是驱动bug,是内核无线模块没有编译为M。 3. 只要修改过kernel .config,编译外部模块前,必须执行modules_prepare。 4. 架构、交叉编译器必须严格匹配:64位内核用arm64 + aarch64‑linux‑gnu‑。 5. 驱动加载顺序:先cfg80211/mac80211,再aic8800_fdrv。 附录:常见排查命令 Plain Text
#查看内核配置
grep -E 'CONFIG_ARM=|CONFIG_ARM64=' ~/uisrc‑lab‑xlnx/sources/kernel/.config
grep -E "CONFIG_CFG80211|CONFIG_MAC80211" ~/uisrc‑lab‑xlnx/sources/kernel/.config
#校验ko
file aic8800_fdrv.ko
aarch64‑linux‑gnu‑nm aic8800_fdrv.ko | grep cfg80211
#开发板端查看usb设备
lsusb
dmesg | grep usb
dmesg | grep aic
|
aic8800_fdrv makefile完整代码: EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS) EXTRA_CFLAGS += -Wno-implicit-fallthrough #EXTRA_CFLAGS += -Wno-unused-variable RWNX_VERS_NUM := 6.4.3.0 CONFIG_AIC8800_WLAN_SUPPORT = m MODULE_NAME = aic8800_fdrv CONFIG_COUNTRY_CODE = "00" # Support of bootrom start CONFIG_START_FROM_BOOTROM = y # Support of pmic setting, new version bootrom avaliable CONFIG_PMIC_SETTING ?=n # Select 8800DC/DW DCDC_VRF mode, check your board CONFIG_VRF_DCDC_MODE = y # ROM patch enabled option CONFIG_ROM_PATCH_EN ?=y # # WAITING FOR KCONFIG { # CONFIG_RWNX_SOFTMAC ?= n CONFIG_RWNX_FULLMAC ?= y CONFIG_RWNX_FHOST ?= n # # DEBUG OPTIONS CONFIG_RWNX_UM_HELPER_DFLT ?= "/dini/dini_bin/rwnx_umh.sh" CONFIG_AIC_FW_PATH = "/vendor/etc/firmware" export CONFIG_AIC_FW_PATH # # FW ARCH: CONFIG_RWNX_SDM ?= n CONFIG_RWNX_TL4 ?= n # IPC version CONFIG_RWNX_OLD_IPC ?= n # Support of P2P DebugFS for enabling/disabling NoA and OppPS CONFIG_RWNX_P2P_DEBUGFS ?= y # # } // WAITING FOR KCONFIG # # Enable A‑MSDU support (need FW support) ## Select this if FW is compiled with AMSDU support CONFIG_RWNX_SPLIT_TX_BUF ?= n ## Select this TO send AMSDU CONFIG_RWNX_AMSDUS_TX ?= n # Enable BFMER support (need FW support) CONFIG_RWNX_BFMER ?= n CONFIG_SDIO_SUPPORT =n CONFIG_USB_SUPPORT =y CONFIG_RX_REORDER =y CONFIG_ARP_OFFLOAD =y CONFIG_USE_5G = y CONFIG_RADAR_OR_IR_DETECT =n CONFIG_DOWNLOAD_FW =n CONFIG_RFTEST=y CONFIG_USB_BT=y CONFIG_MAC_RANDOM_IF_NO_MAC_IN_EFUSE = y CONFIG_WPA3_FOR_OLD_KERNEL = n CONFIG_HE_FOR_OLD_KERNEL = n CONFIG_VHT_FOR_OLD_KERNEL = n # CONFIG_COEX = n for BT_ONLY, CONFIG_COEX =y for combo and sw CONFIG_COEX = y CONFIG_ALIGN_8BYTES = y CONFIG_TXRX_THREAD_PRIO = y CONFIG_USB_ALIGN_DATA = y CONFIG_RX_TASKLET = n CONFIG_TX_TASKLET = n CONFIG_RX_NETIF_RECV_SKB = y CONFIG_BR_SUPPORT = n CONFIG_USB_MSG_OUT_EP = y CONFIG_USB_MSG_IN_EP = y CONFIG_USB_RX_REASSEMBLE = n #DCDW support tx aggr, D80 support both CONFIG_USB_RX_AGGR = n CONFIG_USB_TX_AGGR = n CONFIG_USB_NO_TRANS_DMA_MAP = n CONFIG_GPIO_WAKEUP = n CONFIG_CREATE_TRACE_POINTS = n CONFIG_SUPPORT_REALTIME_CHANGE_MAC = y CONFIG_USE_USB_ZERO_PACKET = y CONFIG_DEBUG_FS = n CONFIG_STA_SCAN_WHEN_P2P_WORKING = y CONFIG_SET_VENDOR_EXTENSION_IE = n CONFIG_VENDOR_GPIO = n CONFIG_FWLOG_EN = n CONFIG_FOR_IPCAM = n CONFIG_5M10M = n # Need to set fw path in BOARD_KERNEL_CMDLINE CONFIG_USE_FW_REQUEST ?= n CONFIG_USE_P2P0 = n CONFIG_ONE_TXQ = n CONFIG_PER_STA_FC = n CONFIG_PREALLOC_RX_SKB ?= n CONFIG_PREALLOC_TXQ ?= y CONFIG_USE_WIRELESS_EXT = y CONFIG_DPD = y CONFIG_FORCE_DPD_CALIB = y CONFIG_LOFT_CALIB = n CONFIG_GKI = n CONFIG_SCHED_SCAN = n CONFIG_TEMP_COMP = n CONFIG_POWER_LIMIT = n CONFIG_EXT_FEM_8800DCDW = n # CONFIG_MCC = n for sta and p2p concurrent in same channel. CONFIG_MCC = y CONFIG_LOAD_BT_PATCH_IN_FDRV = n ifneq ($(CONFIG_WIRELESS_EXT), y) CONFIG_USE_WIRELESS_EXT = n endif ifeq ($(CONFIG_EXT_FEM_8800DCDW), y) CONFIG_DPD = n CONFIG_FORCE_DPD_CALIB = n CONFIG_LOFT_CALIB = y endif # Support of MU‑MIMO transmission (need FW support) ifeq ($(CONFIG_RWNX_BFMER), y) CONFIG_RWNX_MUMIMO_TX ?= n else CONFIG_RWNX_MUMIMO_TX = n endif # Enable handling of radar event CONFIG_RWNX_RADAR ?= y # Enable HW queue for Broadcast/Multicast traffic (need FW support) CONFIG_RWNX_BCMC ?= y # Enable Monitor+Data interface support (need FW support) CONFIG_RWNX_MON_DATA =n CONFIG_RWNX_MON_XMIT ?= n CONFIG_RWNX_MON_RXFILTER ?= n CONFIG_FILTER_TCP_ACK =y # extra DEBUG config CONFIG_RWNX_SW_PROFILING ?= n CONFIG_RWNX_DBG ?= y BR_NAME = br0 obj-$(CONFIG_AIC8800_WLAN_SUPPORT) := $(MODULE_NAME).o $(MODULE_NAME)-y := \ rwnx_wakelock.o \ rwnx_msg_tx.o \ rwnx_msg_rx.o \ rwnx_utils.o \ rwnx_cmds.o \ rwnx_irqs.o \ rwnx_cfgfile.o \ rwnx_strs.o \ rwnx_rx.o \ rwnx_tx.o \ rwnx_txq.o \ rwnx_main.o \ rwnx_mod_params.o \ rwnx_mesh.o \ rwnx_platform.o \ rwnx_pci.o \ rwnx_dini.o \ rwnx_v7.o \ ipc_host.o \ rwnx_tdls.o \ regdb.o \ md5.o \ aic_vendor.o \ aic_priv_cmd.o \ aicwf_compat_8800dc.o \ aicwf_compat_8800d80.o \ aicwf_compat_8800d80x2.o $(MODULE_NAME)-$(CONFIG_BR_SUPPORT) += aic_br_ext.o $(MODULE_NAME)-$(CONFIG_RWNX_RADAR) += rwnx_radar.o $(MODULE_NAME)-$(CONFIG_DEBUG_FS) += rwnx_debugfs.o $(MODULE_NAME)-$(CONFIG_DEBUG_FS) += rwnx_fw_trace.o $(MODULE_NAME)-$(CONFIG_NL80211_TESTMODE) += rwnx_testmode.o $(MODULE_NAME)-$(CONFIG_RWNX_BFMER) += rwnx_bfmer.o $(MODULE_NAME)-$(CONFIG_RWNX_MUMIMO_TX) += rwnx_mu_group.o $(MODULE_NAME)-$(CONFIG_SDIO_SUPPORT) += sdio_host.o $(MODULE_NAME)-$(CONFIG_SDIO_SUPPORT) += aicwf_txrxif.o $(MODULE_NAME)-$(CONFIG_SDIO_SUPPORT) += aicwf_sdio.o $(MODULE_NAME)-$(CONFIG_FILTER_TCP_ACK) += aicwf_tcp_ack.o $(MODULE_NAME)-$(CONFIG_USB_SUPPORT) += usb_host.o $(MODULE_NAME)-$(CONFIG_USB_SUPPORT) += aicwf_txrxif.o $(MODULE_NAME)-$(CONFIG_USB_SUPPORT) += aicwf_usb.o $(MODULE_NAME)-$(CONFIG_USE_WIRELESS_EXT) += aicwf_wext_linux.o $(MODULE_NAME)-$(CONFIG_GKI) += rwnx_gki.o ccflags-$(CONFIG_DEBUG_FS) += -DCONFIG_RWNX_DEBUGFS ccflags-$(CONFIG_DEBUG_FS) += -DCONFIG_RWNX_UM_HELPER_DFLT=\"$(CONFIG_RWNX_UM_HELPER_DFLT)\" ccflags-$(CONFIG_RWNX_P2P_DEBUGFS) += -DCONFIG_RWNX_P2P_DEBUGFS # FW VARS ccflags-y += -DNX_VIRT_DEV_MAX=4 #for 8800D and DCDW u01 #ccflags-y += -DNX_REMOTE_STA_MAX=8 #for 8800DCDW u02 ccflags-y += -DNX_REMOTE_STA_MAX_FOR_OLD_IC=8 ccflags-y += -DNX_REMOTE_STA_MAX=32 ccflags-y += -DNX_MU_GROUP_MAX=62 ccflags-y += -DNX_TXDESC_CNT=64 ccflags-y += -DNX_TX_MAX_RATES=4 ccflags-y += -DNX_CHAN_CTXT_CNT=3 # FW ARCH: ccflags-$(CONFIG_RWNX_SDM) += -DCONFIG_RWNX_SDM ccflags-$(CONFIG_RWNX_TL4) += -DCONFIG_RWNX_TL4 ccflags-$(CONFIG_RWNX_OLD_IPC) += -DCONFIG_RWNX_OLD_IPC ccflags-$(CONFIG_START_FROM_BOOTROM) += -DCONFIG_START_FROM_BOOTROM ccflags-$(CONFIG_PMIC_SETTING) += -DCONFIG_PMIC_SETTING ccflags-$(CONFIG_VRF_DCDC_MODE) += -DCONFIG_VRF_DCDC_MODE ccflags-$(CONFIG_ROM_PATCH_EN) += -DCONFIG_ROM_PATCH_EN ccflags-$(CONFIG_WPA3_FOR_OLD_KERNEL) += -DCONFIG_WPA3_FOR_OLD_KERNEL ccflags-$(CONFIG_HE_FOR_OLD_KERNEL) += -DCONFIG_HE_FOR_OLD_KERNEL ccflags-$(CONFIG_VHT_FOR_OLD_KERNEL) += -DCONFIG_VHT_FOR_OLD_KERNEL ccflags-$(CONFIG_COEX) += -DCONFIG_COEX ccflags-y += -DCONFIG_RWNX_FULLMAC ccflags-y += -I$(src)/. ccflags-$(CONFIG_RWNX_RADAR) += -DCONFIG_RWNX_RADAR ccflags-$(CONFIG_RWNX_MON_DATA) += -DCONFIG_RWNX_MON_DATA ccflags-$(CONFIG_RWNX_MON_XMIT) += -DCONFIG_RWNX_MON_XMIT ccflags-$(CONFIG_RWNX_MON_RXFILTER) += -DCONFIG_RWNX_MON_RXFILTER ccflags-$(CONFIG_RWNX_BFMER) += -DCONFIG_RWNX_BFMER ccflags-$(CONFIG_RWNX_SPLIT_TX_BUF) += -DCONFIG_RWNX_SPLIT_TX_BUF ifeq ($(CONFIG_RWNX_SPLIT_TX_BUF), y) ccflags-$(CONFIG_RWNX_AMSDUS_TX) += -DCONFIG_RWNX_AMSDUS_TX endif ccflags-$(CONFIG_RWNX_DBG) += -DCONFIG_RWNX_DBG ccflags-$(CONFIG_RWNX_SW_PROFILING) += -DCONFIG_RWNX_SW_PROFILING ccflags-$(CONFIG_RWNX_MUMIMO_TX) += -DCONFIG_RWNX_MUMIMO_TX ccflags-$(CONFIG_RFTEST) += -DCONFIG_RFTEST ccflags-$(CONFIG_MCC) += -DCONFIG_MCC ccflags-$(CONFIG_LOAD_BT_PATCH_IN_FDRV) += -DCONFIG_LOAD_BT_PATCH_IN_FDRV ifeq ($(CONFIG_SDIO_SUPPORT), y) ccflags-y += -DAICWF_SDIO_SUPPORT endif ifeq ($(CONFIG_USB_SUPPORT), y) ccflags-y += -DAICWF_USB_SUPPORT endif ifeq ($(CONFIG_BR_SUPPORT), y) ccflags-y += -DCONFIG_BR_SUPPORT ccflags-y += '-DCONFIG_BR_SUPPORT_BRNAME="'$(BR_NAME)'"' endif ifeq ($(CONFIG_RWNX_MUMIMO_TX), y) ccflags-y += -DCONFIG_USER_MAX=2 else ccflags-y += -DCONFIG_USER_MAX=1 endif ifeq ($(CONFIG_RWNX_BCMC), y) ccflags-y += -DNX_TXQ_CNT=5 else ccflags-y += -DNX_TXQ_CNT=4 endif # For old kernel (<=3.19) ifeq ($(shell test $(VERSION) -lt 4 -a "$(CONFIG_VENDOR_RWNX)" = y ; echo $$?),0) ccflags-y += -DCONFIG_VENDOR_RWNX_VHT_NO80 endif ccflags-$(CONFIG_RX_REORDER) += -DAICWF_RX_REORDER ccflags-$(CONFIG_ARP_OFFLOAD) += -DAICWF_ARP_OFFLOAD ccflags-$(CONFIG_USE_5G) += -DUSE_5G ccflags-$(CONFIG_RADAR_OR_IR_DETECT) += -DRADAR_OR_IR_DETECT ccflags-$(CONFIG_DOWNLOAD_FW) += -DCONFIG_DOWNLOAD_FW ccflags-$(CONFIG_USB_BT) += -DCONFIG_USB_BT ccflags-$(CONFIG_ALIGN_8BYTES) += -DCONFIG_ALIGN_8BYTES ccflags-$(CONFIG_TXRX_THREAD_PRIO) += -DCONFIG_TXRX_THREAD_PRIO ccflags-$(CONFIG_USB_ALIGN_DATA) += -DCONFIG_USB_ALIGN_DATA ccflags-$(CONFIG_MAC_RANDOM_IF_NO_MAC_IN_EFUSE) += -DCONFIG_MAC_RANDOM_IF_NO_MAC_IN_EFUSE ccflags-$(CONFIG_VENDOR_GPIO) += -DCONFIG_VENDOR_GPIO ccflags-y += -DDEFAULT_COUNTRY_CODE=""\$(CONFIG_COUNTRY_CODE)"\" ccflags-$(CONFIG_RX_NETIF_RECV_SKB) += -DCONFIG_RX_NETIF_RECV_SKB ccflags-$(CONFIG_USB_MSG_OUT_EP) += -DCONFIG_USB_MSG_OUT_EP ccflags-$(CONFIG_USB_MSG_IN_EP) += -DCONFIG_USB_MSG_IN_EP ccflags-$(CONFIG_USB_RX_REASSEMBLE) += -DCONFIG_USB_RX_REASSEMBLE ccflags-$(CONFIG_USB_RX_AGGR) += -DCONFIG_USB_RX_AGGR ccflags-$(CONFIG_USB_TX_AGGR) += -DCONFIG_USB_TX_AGGR ccflags-$(CONFIG_USB_NO_TRANS_DMA_MAP) += -DCONFIG_USB_NO_TRANS_DMA_MAP ccflags-$(CONFIG_GPIO_WAKEUP) += -DCONFIG_GPIO_WAKEUP ccflags-$(CONFIG_CREATE_TRACE_POINTS) += -DCREATE_TRACE_POINTS ccflags-$(CONFIG_RX_TASKLET) += -DCONFIG_RX_TASKLET ccflags-$(CONFIG_TX_TASKLET) += -DCONFIG_TX_TASKLET ccflags-$(CONFIG_USE_USB_ZERO_PACKET) += -DCONFIG_USE_USB_ZERO_PACKET ccflags-$(CONFIG_STA_SCAN_WHEN_P2P_WORKING) += -DCONFIG_STA_SCAN_WHEN_P2P_WORKING ccflags-$(CONFIG_SUPPORT_REALTIME_CHANGE_MAC) += -DCONFIG_SUPPORT_REALTIME_CHANGE_MAC ccflags-$(CONFIG_SET_VENDOR_EXTENSION_IE) += -DCONFIG_SET_VENDOR_EXTENSION_IE ccflags-$(CONFIG_FWLOG_EN) += -DCONFIG_FWLOG_EN ccflags-$(CONFIG_FOR_IPCAM) += -DCONFIG_FOR_IPCAM -DCONFIG_ONE_TXQ ccflags-$(CONFIG_5M10M) += -DCONFIG_5M10M ccflags-$(CONFIG_USE_FW_REQUEST) += -DCONFIG_USE_FW_REQUEST ccflags-$(CONFIG_USE_P2P0) += -DCONFIG_USE_P2P0 ccflags-$(CONFIG_ONE_TXQ) += -DCONFIG_ONE_TXQ ccflags-$(CONFIG_PER_STA_FC) += -DCONFIG_PER_STA_FC ccflags-$(CONFIG_PREALLOC_RX_SKB) += -DCONFIG_PREALLOC_RX_SKB ccflags-$(CONFIG_PREALLOC_TXQ) += -DCONFIG_PREALLOC_TXQ ccflags-$(CONFIG_USE_WIRELESS_EXT) += -DCONFIG_USE_WIRELESS_EXT ccflags-$(CONFIG_DPD) += -DCONFIG_DPD ccflags-$(CONFIG_FORCE_DPD_CALIB) += -DCONFIG_FORCE_DPD_CALIB -DCONFIG_DPD ccflags-$(CONFIG_LOFT_CALIB) += -DCONFIG_LOFT_CALIB ccflags-$(CONFIG_GKI) += -DCONFIG_GKI ccflags-$(CONFIG_SCHED_SCAN) += -DCONFIG_SCHED_SCAN ccflags-$(CONFIG_FILTER_TCP_ACK) += -DCONFIG_FILTER_TCP_ACK ccflags-$(CONFIG_TEMP_COMP) += -DCONFIG_TEMP_COMP ccflags-$(CONFIG_POWER_LIMIT) += -DCONFIG_POWER_LIMIT ccflags-$(CONFIG_EXT_FEM_8800DCDW) += -DCONFIG_EXT_FEM_8800DCDW MAKEFLAGS +=-j$(shell nproc) # Platform support list CONFIG_PLATFORM_XILINX_MPSOC ?= y CONFIG_PLATFORM_ROCKCHIP ?= n CONFIG_PLATFORM_ALLWINNER ?= n CONFIG_PLATFORM_AMLOGIC ?= n CONFIG_PLATFORM_HI ?= n CONFIG_PLATFORM_UBUNTU ?= n # ================= Xilinx Zynq‑MPSoC 重点 ================= ifeq ($(CONFIG_PLATFORM_XILINX_MPSOC), y) ARCH := arm64 # 你的内核源码路径 KDIR ?= /home/uisrc/uisrc-lab-xlnx/sources/kernel CROSS_COMPILE := aarch64-linux-gnu- # MPSOC PetaLinux 标准Linux,**不要DANDROID_PLATFORM** endif ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y) ARCH := arm64 KDIR ?= /home/uisrc/rk3588/kernel CROSS_COMPILE := /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ccflags-y += -DANDROID_PLATFORM ccflags-y += -DCONFIG_PLATFORM_ROCKCHIP endif ifeq ($(CONFIG_PLATFORM_ALLWINNER), y) KDIR ?= /home/uisrc/rk3588/kernel ARCH ?= arm64 CROSS_COMPILE ?= /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ccflags-y += -DANDROID_PLATFORM endif ifeq ($(CONFIG_PLATFORM_AMLOGIC), y) ccflags-y += -DANDROID_PLATFORM ARCH ?= arm CROSS_COMPILE ?= /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- KDIR ?= /home/uisrc/rk3588/kernel endif ifeq ($(CONFIG_PLATFORM_HI), y) ccflags-y += -DANDROID_PLATFORM ccflags-y += -DCONFIG_PLATFORM_HI ARCH ?= arm CROSS_COMPILE ?= /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- KDIR ?= /home/uisrc/rk3588/kernel endif ifeq ($(CONFIG_PLATFORM_UBUNTU), y) KDIR ?= /lib/modules/$(shell uname -r)/build PWD ?= $(shell pwd) KVER ?= $(shell uname -r) MODDESTDIR ?= /lib/modules/$(KVER)/kernel/drivers/net/wireless/aic8800 SUBARCH = $(shell uname -m | sed -e s/i.86/i386/ -e s/armv.l/arm/ -e s/aarch64/arm64/) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= endif all: modules modules: make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules install: mkdir -p $(MODDESTDIR) install -p -m 644 $(MODULE_NAME).ko $(MODDESTDIR) /sbin/depmod -a ${KVER} uninstall: rm -rfv $(MODDESTDIR)/$(MODULE_NAME).ko /sbin/depmod -a ${KVER} clean: rm -rf *.o *.ko *.o.* *.mod.* modules.* Module.* .a* .o* .*.o.* *.mod .tmp* .cache.mk .modules.order.cmd .Module.symvers.cmd Aic8800 完整代码: CONFIG_AIC_LOADFW_SUPPORT := y CONFIG_AIC8800_WLAN_SUPPORT := y obj-$(CONFIG_AIC_LOADFW_SUPPORT) += aic_load_fw/ obj-$(CONFIG_AIC8800_WLAN_SUPPORT) += aic8800_fdrv/ ########## config option ########## export CONFIG_USE_FW_REQUEST = n export CONFIG_PREALLOC_RX_SKB = y export CONFIG_PREALLOC_TXQ = y ################################### ########## platform support list ########## # Xilinx平台,关闭其他SOC平台 export CONFIG_PLATFORM_ROCKCHIP = n export CONFIG_PLATFORM_ALLWINNER = n export CONFIG_PLATFORM_AMLOGIC = n export CONFIG_PLATFORM_HI = n export CONFIG_PLATFORM_UBUNTU = n # -------- Xilinx ZynqMP 配置 重点修改这里 -------- ifeq ($(CONFIG_PLATFORM_XILINX), y) ARCH = arm64 # 你的内核源码路径 KDIR = /home/uisrc/uisrc-lab-xlnx/sources/kernel # 你的aarch64交叉编译器前缀 CROSS_COMPILE = aarch64-linux-gnu- # 非Android平台,移除 -DANDROID_PLATFORM endif # 原有平台保留,不使用 ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y) ARCH = arm64 KDIR = /home/user/project/project/milianke/kernel-6.1 CROSS_COMPILE = /home/user/project/project/milianke/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ccflags-y += -DANDROID_PLATFORM endif ifeq ($(CONFIG_PLATFORM_ALLWINNER), y) KDIR = /home/uisrc/rk3588/kernel ARCH = arm64 CROSS_COMPILE = /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ccflags-y += -DANDROID_PLATFORM endif ifeq ($(CONFIG_PLATFORM_AMLOGIC), y) ccflags-y += -DANDROID_PLATFORM ARCH = arm CROSS_COMPILE = /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- KDIR = /home/uisrc/rk3588/kernel endif ifeq ($(CONFIG_PLATFORM_HI), y) ccflags-y += -DANDROID_PLATFORM ARCH = arm CROSS_COMPILE = /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- KDIR = /home/uisrc/rk3588/kernel endif ifeq ($(CONFIG_PLATFORM_UBUNTU), y) KDIR = /lib/modules/$(shell uname -r)/build PWD = $(shell pwd) KVER = $(shell uname -r) MODDESTDIR = /lib/modules/$(KVER)/kernel/drivers/net/wireless/aic8800 SUBARCH = $(shell uname -m | sed -e s/i.86/i386/ -e s/armv.l/arm/ -e s/aarch64/arm64/) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= endif ########################################### MAKEFLAGS +=-j$(shell nproc) all: modules modules: make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules install: mkdir -p $(MODDESTDIR) install -p -m 644 aic_load_fw/aic_load_fw.ko $(MODDESTDIR)/ install -p -m 644 aic8800_fdrv/aic8800_fdrv.ko $(MODDESTDIR)/ /sbin/depmod -a ${KVER} uninstall: rm -rfv $(MODDESTDIR)/aic_load_fw.ko rm -rfv $(MODDESTDIR)/aic8800_fdrv.ko /sbin/depmod -a ${KVER} clean: cd aic_load_fw/;make clean;cd .. cd aic8800_fdrv/;make clean;cd .. rm -rf modules.order Module.symvers .modules.order.cmd .Module.symvers.cmd .tmp_versions/
|