问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 19 人浏览分享

开启左侧

uisrc‑lab‑xlnx ZU2CG开发板移植AIC8800无线驱动

[复制链接]
19 0
经验分享
经验分享: 01-AMD(XILINX) » X
uisrc‑lab‑xlnx ZU2CG开发板移植AIC8800无线驱动踩坑记录|cfg80211未定义、test参数过多
一、环境介绍
开发板:F31 2CGZynq UltraScale+ MPSoC
工程SDKuisrc‑lab‑xlnx(自制PetaLinux工程)
内核架构:64AArch64 CONFIG_ARM64=y
驱动:AIC8800 USB无线蓝牙二合一驱动 aic8800_fdrv
交叉编译器:aarch64‑linux‑gnu‑
ZU2CG Cortex‑A53硬件支持32/64双模式,本项目使用64位内核。移植AIC8800 USB WiFi驱动遇到两个典型问题:make cleanshell错误;ko编译出来但insmod加载失败,大量cfg80211符号undefined
二、问题现象
现象1 make clean 报错
Plain Text
/bin/sh: line 0: test: too many arguments
不阻止编译,但属于Makefileshell语法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硬件A5364CPU,但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 argumentsAIC8800原始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内核打开cfg80211mac80211模块
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、根文件系统需要包含cfg80211mac80211模块
    Plain Text
    petalinux‑config -c rootfs
    勾选:kernel‑modules‑cfg80211kernel‑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
    4USB设备树
    ZU2CG使用USB外设,确认PS‑USB控制器在设备树中已经使能,否则识别不到AIC8800硬件。
    八、ZU2CG踩坑总结
    1. ZU2CGMPSoC)硬件是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 AMSDU 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 MUMIMO 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 ZynqMPSoC 重点 =================
    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/

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    0

    关注

    10

    粉丝

    168

    主题
    精彩推荐
    热门资讯
      网友晒图
        图文推荐
          
          • 微信公众平台

          • 扫描访问手机版