#======================================================================================================= 编译方法: 1,树莓派上编译的话 请先make menuconfig配置下 Device Drivers > Network device support > Wireless LAN > Asr Wireless Modules 选择芯片 lega/canon/duet/alto/bass usb/sdio use_dts 等属性 也可以这样配置 copy bcm2711_asr_xxx_defconfig 到树莓派的kernel ./arch/arm64/configs 目录 然后 KERNEL=kernel8;make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_asr_xxx_defconfig 再编译 KERNEL=kernel8;make ARCH=arm64 -j$(nproc) CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs kernel8 对应的树莓派4B 2,pc ubuntu上编译5532u的话,执行make TARGET=canon_usb 即可生成ubuntu平台的5532u ko lega 5505 sdio canon 5532 usb/sdio duet 5825 sdio alto 595x sdio bass 596x sdio 公共Makefile 对应是上述芯片的公共Makefile文件 请在公共Makefile 里修改 自己的对应的 platform,默认是树莓派平台,即 CONFIG_PLATFORM_RASPI_AARCH64 :=y, 如果是编译ubuntu pc版本的ko,请设置 CONFIG_PLATFORM_I386_PC:=y 其它设置成n 另外 CONFIG_BOARD 改成 自己对应的 芯片 比如 lega/duet/canon/alto 1,使用内核方式整体随内核一起编译。 (1)将驱动目录asrwifidrv整体拷贝到kernel/driver/net/wireless/下面。 (2)修改wireless目录下的makefile文件中最后加一行obj-$(CONFIG_WLAN_VENDOR_ASR) += asrwifidrv/。 (3)修改wireless目录下的kconfig文件中最后加一行source "drivers/net/wireless/asrwifidrv/Kconfig"。 (4)进入kernel根目录下使用make menuconfig命令进入配置界面选择device drivers->Network device support->Wireless Lan-> Asr wireless modules->Asr 5505 SDIO Wi-Fi,芯片名需要更加实际需要选择。 (5)需要在dts中添加platform device名称与驱动名称一致,比如如下asr-platform。 (6)编译。 asr-platform { pinctrl-names = "boot_pins_gpio", "boot_pin_uart", "reset_on", "reset_off"; pinctrl-0 = <&fincha0_bt_uart_rts_func0>; pinctrl-1 = <&fincha0_bt_uart_rts_func4 &fincha0_bt_uart_func4>; pinctrl-2 = <&fincha0_wifi_reset_on>; pinctrl-3 = <&fincha0_wifi_reset_off>; sd-host = <&sdh1>; asr_fw,reset-gpios = <&gpio 47 0>; compatible = "asr,asr-platform"; status = "okay"; }; 2,在驱动路径下直接使用make单独编译。 (1)如果需要同时支持内核整体编译方式的话那么1步骤也要做,然后直接参考CONFIG_PLATFORM_HI3516_ARM=y类似的配置好 kernel路径和编译器名称就可以了单独编译了。 (2)如果不支持内核整体编译方式,只需要单独编译驱动,并且不想修改dts,那么需要打开CONFIG_NOT_USED_DTS=y,这样就会在 驱动中生成platform device,并且参考CONFIG_PLATFORM_HI3516_ARM=y类似的配置好kernel路径和编译器名称就可以了单独编译了。 #======================================================================================================= #======================================================================================================= 增加ps休眠 默认lega/duet 等均支持ps休眠 一,lega 有3种休眠模式 1,默认的 xtal不gate的伪modem sleep,不需要任何额外的gpio唤醒pin . 对应的配置是:bcm2711_asr_lega_defconfig 2,light sleep 需要2根gpio 唤醒pin,1根是host唤醒card,1根是card唤醒host. 对应的配置是:bcm2711_asr_lega_light_defconfig 3,light sleep,集成 1根host唤醒card pin. 对应的配置是:bcm2711_asr_lega_jicheng_defconfig 二,duet 有2种休眠模式 1,默认的 xtal不gate的伪modem sleep,不需要任何额外的gpio唤醒pin. 对应的配置是:bcm2711_asr_duet_defconfig 2,真modem sleep,xtal gate住, 需要2根gpio 唤醒pin,1根是host唤醒card,1根是card唤醒host.对应的配置是:bcm2711_asr_duet_ture_modem_defconfig 三,canon 5532u 有2种休眠模式 1,默认的 xtal不gate的伪modem sleep,不需要任何额外的gpio唤醒pin 对应的配置是:bcm2711_asr_canon_5532u_defconfig 2,真light sleep 不需要额外的唤醒gpio 对应的配置是:bcm2711_asr_canon_5532u_light_defconfig 四,canon 5532s 有2种休眠模式 1,默认的 xtal不gate的伪modem sleep,不需要任何额外的gpio唤醒pin 对应的配置是:bcm2711_asr_canon_5532s_defconfig 2,light sleep 需要2根gpio 唤醒pin,1根是host唤醒card,1根是card唤醒host 对应的配置是:bcm2711_asr_canon_5532s_light_defconfig 五,其它芯片待补充 #======================================================================================================= #======================================================================================================= pc上运行 usb asr5531方案: 如果要在pc上运行 usb asr5531方案请将Makefile中如下宏置y,默认宏就是支持ubuntu 5531usb编译的 CONFIG_PLATFORM_I386_PC = y # y表示pc 平台,n表示arm平台 CONFIG_NOT_USED_DTS = y # y表示不使用 dts 编译,n表示使用dts CONFIG_ASR_USB = y # y表示使用 usb,n表示不使用usb CONFIG_ASR_SDIO = n # y表示使用 sdio,n表示不使用sdio CONFIG_PLATFORM_FULLHAN_ARM=y # y表示FUHAN平台,n表示其它平台 CONFIG_PLATFORM_HI3516_ARM=y # y表示HI3516平台,n表示其它平台 CONFIG_ASR_SAE = y 开启表示支持连接wpa3的路由器,如连接到wpa3路由器的话需要升级wpa_supplicant 版本到2.10 ccflags-y += -DASR_REDUCE_TCP_ACK 为开启降低ack发送频率,默认是6个ack回一个ack,频率可以通过来修改, 比如从默认的6修改成16的话 1,可以通过insmod ko时候来设置sudo insmod asr5531.ko nss=2 tcp_ack_num=16 2,可以动态修改,执行sudo sh -c 'echo 16 > /sys/module/asr5531/parameters/tcp_ack_num' 支持驱动设置CCA值:设置方法如下 修改drv_code/asr_wifi_config.ini 里的 CCA_THRESHOLD=-35 ,默认是-35,可以改成其它值,范围[-90,0],通过 sudo insmod xxx.ko 来加载生效 默认5532u支持漫游功能:通过驱动的CFG_ROAMING宏来设置的 注意需要将wpa_supplicant 2.9 或以上版本 打开 CONFIG_MBO:=y CONFIG_WNM:=y CONFIG_IEEE80211R:=y CONFIG_FILS:=y来支持漫游 新增支持11r ft 漫游配置,验证过wfa的 Over-the-Air FT ft WPA2-Enterprise 的wpa_supplicant.conf 供参考 network={ ssid="WiFi1-5.2.6" key_mgmt=FT-EAP WPA-EAP eap=TTLS ieee80211w=1 group_mgmt=AES-128-CMAC identity="as-iot" password="AAbbcc123" phase1="peaplabel=0" phase2="auth=MSCHAPV2" } ft WPA2-Personal的wpa_supplicant.conf 供参考 network={ ssid="WiFi1-5.2.6" psk="MBORocks" key_mgmt=FT-PSK } 默认5532u支持驱动来设置tx功率功能:通过将 asr_platform.h 中的 PWR_MCS0等设置到 /lib/firmware/asr_wifi_config.ini 文件中 说明:默认tx pwr调整最小单位是0.25dB,drv配置传到fw会乘以0.4取整后再乘以0.25得到实际的变动的dB数 eg:增加mcs0 1dB的话:PWR_MCS0=10 增加mcs0 2dB的话:PWR_MCS0=20 增加mcs0 0.5dB的话:PWR_MCS0=5 这里5,6,7都行 算出的都是0.5dB note: 默认配置是ubutnu平台,usb模式,不使用dts 使用非dts时,需要注意 openwrt里之前存在.config 里有配置sdio或usb的话,会重新置位usb或sdio,需要在openwrt目录make kernel_menuconfig 重新配置下 支持docker 环境编译和运行 说明:/home/john/asr_work/test_1826_drv/legasdiodrv 为举例说明,drv的绝对路径,执行时需要替换成自己的 docker build -t ubuntu5531:v1 . docker run -itu0 --name ubuntu5531 --privileged=true --net=host -v /dev/bus/usb:/dev/bus/usb -v /home/john/asr_work/test_1826_drv/legasdiodrv:/root/asrwifidrv ubuntu5531:v1 /bin/bash #=======================================================================================================