AX900(AIC8800) USB-WIFI模块驱动适配

一、搭建安装环境

找一块RK3399的 arm-linux开发板,在主目录创建文件夹usbwifi,进入usbwifi目录,拉取下载的AIC8800驱动,进入驱动目录,查看驱动Makefile文件规则。

可以看到以下路径:

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 ?=

二、安装linux头文件

1、查看内核版本号

安装Linux头文件,查看Linux内核版本号

从firefly官方的资源下载界面,对应型号的资源页面下载linux 头文件,可参考网站:

firefly-Linux headers下载及安装说明

# 安装
sudo dpkg -i linux-headers-4.19.172_4.19.172-189_arm64.deb

# 准备编译环境
sudo apt install -y build-essential python libssl-dev

# 编译
cd /usr/src/linux-headers-4.4.194
make headers_check
make headers_install

# make scripts 可能会出错,如果出错在 tools,可以直接忽略,安装完成
make scripts

2、安装头文件

只安装头文件,安装image文件,会更新内核文件。

更新内核文件后,会在/usr/src/目录下安装linux-headers-4.4.194,/lib/modules/下会安装4.4.194内核文件。

安装必要的环境库,进入/usr/src/linux-headers-4.4.194进行安装。

sudo apt install -y build-essential python libssl-dev

检查并安装

三、安装USB无线模块驱动

安装完Linux-headers后,进行AIC8800的驱动安装。

1、进入/usbwifi/aic8800_linux_drvier/drivers/aic8800/目录,执行sudo make进行编译。

2、编译过程中存在warning导致编译失败,原因为在aicwf_wext_linux.c:619处存在声明却未使用变量,手动屏蔽该变量重新编译。

3、编译完成,没有问题后,执行make install,安装驱动。

4、进入该目录下:/usbwifi/aic8800_linux_drvier/, 执行 sudo sh ./install_setup.sh,执行完成后驱动安装成功。

5、设备重启后,驱动正常识别

<think>嗯,用户问的是关于USBAIC8800 WiFi模块和SDIO的AIC8800模块如何兼容的问题。首先,我需要明确这两个模块的基本特性和区别。AIC8800系列应该是乐鑫或者另一家厂商的芯片,但可能我记错了,可能需要确认一下。不过,一般来说,USB和SDIO接口的模块在硬件连接和驱动层面上会有不同的处理方式。 接下来,用户提到的兼容可能指的是在同一系统或设备中同时使用这两种模块,或者让两种接口的模块在软件层面上能够互通。这时候,我需要考虑硬件接口的不同,比如USB是通用串行总线,而SDIO是基于SD卡接口的扩展,通常用于嵌入式设备中的无线模块。 首先,硬件兼容性方面,两种模块的物理接口不同,所以硬件设计上需要各自独立的连接。比如USB模块需要连接到主控的USB端口,而SDIO模块需要连接到SDIO控制器。因此,硬件上它们是分开的,不能直接互相替换,除非有转接器,但通常不推荐这样做,因为信号和协议不同。 然后是软件驱动层面。两种接口的模块需要不同的驱动程序。USB WiFi模块通常使用通用的USB网络驱动,比如Linux中的usbnet或者特定厂商的驱动,而SDIO接口的WiFi模块则需要SDIO主机控制器驱动以及对应的WiFi驱动。系统内核需要同时支持这两种驱动,并且正确加载。这时候可能会出现资源冲突,比如中断请求线或者内存地址的问题,需要确保两者在系统中不会冲突。 另外,操作系统层面需要能够管理多个网络接口。当两个模块同时工作时,系统需要正确识别它们,并处理网络流量的路由。用户可能需要配置网络接口,比如设置优先级或者绑定,确保数据通过正确的模块传输。 还有一个可能是固件和协议栈的兼容性。两种模块的固件版本和协议支持需要一致,比如都支持相同的WiFi标准(如802.11ac),加密方式等,否则可能出现连接问题。此外,如果两个模块需要在同一频段工作,比如2.4GHz和5GHz,需要注意避免干扰,或者合理配置信道。 然后,可能需要考虑电源管理。USB和SDIO接口的电源供应可能不同,需要确保主控能够为两个模块提供足够的电力,尤其是在同时工作时,不会因为电量不足导致模块不稳定。 用户可能的应用场景可能是在一个设备中同时使用两种接口的WiFi模块,比如一个用于主连接,另一个作为备用或扩展覆盖范围。或者他们可能在开发过程中需要切换不同的模块进行测试,这时候需要确保软件能够灵活配置。 另外,可能需要确认AIC8800的具体型号,因为不同型号可能在功能和支持的接口上有差异。比如,有些模块可能支持多种接口但需要硬件跳线或软件配置来切换,但通常USB和SDIO是独立的设计,不能通过配置切换,而是需要不同的硬件设计。 总结来说,兼容的关键点在于硬件接口的独立设计、驱动的正确加载和配置、操作系统的多接口管理以及电源和资源的合理分配。用户可能需要按照模块各自的规格书进行硬件连接,并确保系统内核支持相应的驱动,同时在应用层做好网络配置。</think>USB接口的AIC8800 WiFi模块与SDIO接口的AIC8800模块的兼容性问题涉及硬件接口、驱动层和系统配置等多个层面。以下是分步骤解析: --- ### **一、硬件层面的兼容性** 1. **物理接口差异** - **USB模块**:通过USB总线连接,遵循USB协议(如USB 2.0/3.0)。 - **SDIO模块**:通过SDIO总线连接,基于SD卡接口扩展协议。 - **关键区别**:两者物理接口不兼容,无法直接互换使用。 2. **硬件设计建议** - 若需同时支持两种模块,需在主控芯片设计时预留 **USB Host接口** 和 **SDIO控制器接口**。 - 注意电源管理:确保两种接口的供电能力满足模块需求(例如USB可能需500mA,SDIO需根据规格调整)。 --- ### **二、驱动层兼容性** 1. **操作系统支持** - **USB模块**:依赖USB WiFi驱动(如Linux中的 `ath9k_htc` 或厂商专用驱动)。 - **SDIO模块**:依赖SDIO WiFi驱动(如Linux中的 `sdio_bus` 子系统及厂商驱动)。 - **兼容性要求**:系统内核需同时编译支持两种驱动(通过`make menuconfig`启用)。 2. **驱动冲突排查** - 检查内核日志(`dmesg`)确认驱动加载是否成功。 - 确保两种模块的 **设备ID** 已被驱动正确识别(可通过 `lsusb` 或 `mmc-utils` 验证)。 --- ### **三、系统配置与资源分配** 1. **中断与内存资源** - USB和SDIO控制器可能占用不同中断号(IRQ),需避免冲突。 -Linux中可通过 `/proc/interrupts` 监控中断分配。 2. **网络接口管理** - 两个模块会生成独立网络接口(如 `wlan0` 和 `wlan1`)。 - 使用 `iwconfig` 或 `nmcli` 配置优先级或绑定(如设置主备模式)。 --- ### **四、应用层兼容性** 1. **固件与协议栈** - 确保两种模块的 **WiFi协议版本** 一致(如802.11ac/n)。 - 统一加密方式(WPA2/WPA3)以避免连接问题。 2. **频段与信道协调** - 若同时工作,需错开2.4GHz和5GHz频段,或通过软件动态调整信道。 --- ### **五、典型兼容方案** 1. **硬件共存设计** - 在主板上同时布局USB和SDIO接口,通过跳线或软件选择启用某一模块- 示例: ```c // 伪代码:通过GPIO控制电源选择模块 if (use_usb_module) { gpio_set(USB_PWR_EN, HIGH); gpio_set(SDIO_PWR_EN, LOW); } else { gpio_set(USB_PWR_EN, LOW); gpio_set(SDIO_PWR_EN, HIGH); } ``` 2. **软件动态切换** -Linux中通过脚本卸载/加载驱动: ```bash # 切换至USB模块 modprobe -r sdio_aiс8800_driver modprobe usb_aiс8800_driver # 切换至SDIO模块 modprobe -r usb_aiс8800_driver modprobe sdio_aiс8800_driver ``` --- ### **六、验证步骤** 1. **硬件检测** - USB模块:`lsusb` 应显示AIC8800的厂商ID(如 `0x1234:0x5678`)。 - SDIO模块:`mmc-utils sdio list` 应识别到设备。 2. **网络功能测试** - 分别启用两种模块,通过 `ping` 和 `iperf3` 验证吞吐量及稳定性。 --- ### **总结** USB与SDIO接口的AIC8800模块可通过 **硬件共存设计** 和 **驱动动态切换** 实现兼容,但需确保: 1. 硬件资源(供电、接口)独立分配; 2. 操作系统内核支持两种驱动; 3. 应用层协调网络接口优先级。 具体实现需参考AIC8800的官方手册和主控平台的设计规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值