commit:
20220525: 修改log level,写入默认efuse
- 源码编译(QCA)(随时补充)
- SDK概述
- 驱动移植简述
- 网路配置
- 80211接口wpa、hostap编译
- AP mode – 2021.11.30
- STA mode – 2021.12.01
- log_level – 20220525
- 校准
- 概述
- 默认校准文件 – 20220301
- mask数据 – 20200301
- 步骤实例
- eeprom写入efuse数据 – 20220525
- rtwpriv mp_xxx
- Tx 测试步骤汇总
- Rx 测试步骤汇总
- 概述
- issue list
- 上传附件
源码编译
1.kernel module的编译
(1).源码编译
简述:
参考文档:Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf
Makefile 修改plantrom、kernel、cross_compile
Makefile路径:SDK/driver/Makefile
就是个标准的生成module的配置文件,配置下编译器和源码就可以了。
- 添加一个paltfrom定义,用于选择不同的配置信息(下一步要配置的信息)
- 添加一段信息配置kernle的路径、complie路径、ARCH等信息
- make -> 生成88x2bu.ko文件
# 1. 新增平台
-CONFIG_PLATFORM_I386_PC = y
+CONFIG_PLATFORM_IPQ60xx = y // 添加一个platfrom定义并注释默认编译platform
+CONFIG_PLATFORM_I386_PC = n
# 2. 配置环境
+# add : kernel , cross_coplile , ARCH
+ifeq ($(CONFIG_PLATFORM_IPQ60xx), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+ARCH := arm64
+CROSS_COMPILE := /xxxxxx/aarch64-openwrt-linux-
+KSRC ?= /xxxxxxxx/linux-4.4
+endif
# 3. 编译
make //生成88x2bu.ko文件,如果顺利的话。
(2).个人需求
8812bu only
捋一下编译文件就懂了,只生成:8812bu.ko
diff --git a/Makefile b/Makefile
...
-CONFIG_BT_COEXIST = y
+#M : build 8812bu only
+CONFIG_BT_COEXIST = n
支持802.11 – 2021.11.29
参考"Quick_Start_Guide_for_SoftAP" page 2
需要defineCONFIG_IOCTL_CFG80211
和RTW_USE_CFG80211_STA_EVENT
修改Makefile编译条件,添加flag:
diff --git a/Makefile b/Makefile
....
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT # Base on "Quick_Start_Guide_for_SoftAP" page 2
修改默认efuse位置
如果“USER_EFUSE_MAP_PATH”有被定义则使用定义值,如没有定义则使用默认值,修改默认值参考如下:
diff --git a/Makefile b/Makefile
-EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_$(MODULE_NAME).map\"
+EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/etc/xxxxxxx/wifi_efuse_8812bu.map\"
2.hostap等支持软件的编译
hostap等版本选择
根据“Quick_Start_Guide_for_SoftAP”的描述,linux内核>3.2.0以上的版本选择xxx,支持WEXT的选择yyy。由于WEXT停止维护,这里选择80211的版本。且实际环境为linux4.4,故选择"
wpa_supplicant_8_kk_4.4_rtw_r25669.20171213.tar.gz
"作为开发环境。
解压以后主要是两部分的源码,
hostapd_cli
和wpa_supplicant、wpa_cli
分别在hostapd/ 和 wpa_supplicant/ 文件夹中。
porting文档参考如下:
Wireless_tools_porting_guide.pdf
PS:不建议使用,因为大部分linux发行版中都囊括了这些命令,同时官方文档也首推本地命令而非这里的命令。提这个软件包是为了后续配置网络时丢失配置命令可以从这里获得这些命令,留个tag为主。
编译hostapd程序
工程路径:
.../wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw-2-ga8ef7c824.20200911/hostapd/
根据Makefile的描述,没有定义CC等,它就是用本机默认的环境编译,所有只要在最开始定义CC、BINDIR、LIBDIR等参数即可,步骤参考:
# 比如重新定义CC
diff --git a/Makefile b/Makefile
+CC := /xxxxxx/xxxx-gcc
# log 参考:
...
CC ../src/ap/ieee802_11.c
CC ../src/ap/hw_features.c
CC ../src/ap/ieee802_11_ht.c
LD hostapd
CC hostapd_cli.c
CC ../src/common/wpa_ctrl.c
LD hostapd_cli
SDK概述
.
├── android_ref_codes_10.x
├── android_ref_codes_11.x
├── android_ref_codes_JB_4.2
├── android_ref_codes_KK_4.4
├── android_ref_codes_L_5.x
├── android_ref_codes_M_6.x
├── android_ref_codes_N_7.0
├── android_ref_codes_O_8.0
├── android_ref_codes_P_9.x
├── btcoex
├── document // 供参考pdf的文件夹
├── driver // 驱动源码,主要移植对象,驱动程序的SDK顶层目录
├── install.sh
├── readme.txt
├── ReleaseNotes.pdf
├── WiFi_Direct_User_Interface
├── wireless_tools
└── wpa_supplicant_hostapd // hostapd , wpa_cli 等工程源码
15 directories, 3 files
只说一下SDK关于arm linux 部分的内容,其他的东西略过。
SDK driver部分工程结构:
.
├── clean // 卸载本地mode的脚本
├── core
├── hal
├── halmac.mk
├── ifcfg-wlan0 // 接口参数
├── include
├── Kconfig
├── Makefile // Makefile
├── os_dep
├── platform // 平台相关,power on/off 之类的
├── rtl8822b.mk
├── runwpa // wpa脚本
└── wlan0dhcp // dhcp脚本
5 directories, 12 files
SDK工程完整工程结构参考附件中
SDK_list.log
除了上述文件外SDK中还有其他东西被用到,这里不展开了,后续用到了再细说一下。
驱动移植简述
1. 概述
看Makefile就是作为一个单独的module插入内核使用的,所以移植的整体思路就是:
- 配置编译参数:编译链等等
- 编译使用QCA平台且与内核匹配的8812源码
- 移植配置8812网络时需要用到的linux命令,如wpa_cli 、wpa_supplicant、hostapt等
2. 补充说明
- 模块的网络配置是通过wpa_cli这类的程序实现的。(SDK里有自带的相关源码,但是首推linux本地命令)。
网路配置
1. AP mode – 2021.11.30
(1).参考文档
Quick_Start_Guide_for_SoftAP.pdf
// 源码相关
Wireless_tools_porting_guide.pdf
// porting 文档
(2).参考步骤
- 编译RTLxxxx内核源码,生成.ko文件
- 解压hostapd源码,编译并生成hostapd程序
- 新建RF参数配置文件
- 创建AP
(3).操作实例
- 编译内核源码,生成8812bu.ko,过程:参考编译一节内容
- 编译hostapd程序,生成hostapd程序,过程:参考编译一节内容
2.1 cp hostapd和hostapd_cli 到QCA平台。
(在我这个实例中其实用的是本地的hostapd工具,没有用rtl提供的程序,高通这个平台没有出现兼容问题,博通在RF校准时有些兼容问题,综合来说可以考虑移植)- cp 原始.conf 配置文件到QCA平台,以rtl_hostapd_2g.conf中2G的配置文件为例
3.1 修改一下参数:driver_name,driver,hw_mode,协议等等,rtl_hostapd_2g.conf原始参数参考如下(篇幅有限,已经去除大部分注释):
interface=wlan0
ctrl_interface=/var/run/hostapd
ssid=rtwap
channel=6
wpa=2
wpa_passphrase=87654321
# SDK中没有配置,QCA 默认的br_name 为br-lan,建议添加并修改
#bridge=br0
eap_server=1
wps_state=2
uuid=12345678-9abc-def0-1234-56789abcdef0
# 芯片信号不匹配,需要修改
device_name=RTL8192CU
manufacturer=Realtek
model_name=RTW_SOFTAP
model_number=WLAN_CU
serial_number=12345
device_type=6-0050F204-1
os_version=01020300
config_methods=label display push_button keypad
# 这里用到CFG80211 不是WEXT,需要修改
driver=rtl871xdrv
beacon_int=100
hw_mode=g
ieee80211n=1
wme_enabled=1
ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40+]
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
max_num_sta=8
wpa_group_rekey=86400
3.2 修改后比较的diff摘要:
diff --git a/rtl_hostapd_2G.conf b/rtl_hostapd_2G.conf
-#bridge=br0
+bridge=br-lan
-device_name=RTL8192CU
+device_name=RTL8812BU
-driver=rtl871xdrv
+driver=nl80211
- 创建AP
4.1 检查运行环境
确定驱动程序*.ko存在,如8812bu.ko
确定hostapd程序存在,which hostapd,
确定配置文件存在,如rtl_hostapd_2g.conf
4.3 创建AP
insmod 8812bu.ko // 插入
# 参考log :
[ 600.321198] RTW: module init start
[ 600.321226] RTW: rtl88x2bu v5.13.1-27-g3090e5abf.20210903_COEX20210316-18317b7b
[ 600.323501] RTW: build time: Nov 29 2021 13:59:10
[ 600.330871] RTW: rtl88x2bu BT-Coex version = COEX20210316-18317b7b
[ 600.335687] RTW: rtw_inetaddr_notifier_register
[ 600.341733] usbcore: registered new interface driver rtl88x2bu
[ 600.346136] RTW: module init ret=0
which hostapd // 确定hostapd版本
/usr/sbin/hostapd
// 确定8812 usb 硬件连接正常
hostapd rtl_hostapd_2g.conf // 创建AP (以2G AP 为例)
# 参考log:
wlan0: interface state HT_SCAN->ENABLED
wlan0: AP-ENABLED
- 检查结果
确认可以搜索到8812相关的SSID,如这里的rtl_8812_2g
PS:可以连接AP并测试网络连通性,可以进一步确认br等参数是否都正确
2. STA mode – 2021.12.01
(1).参考文档
Quick_Start_Guide_for_Station_Mode.pef
// STA 配置文档
(2).参考步骤
- 检查运行环境
1.1 关闭后台运行的程序,如“network-manger”、“wpa_supplicant”等
PS:不同平台network-manger不同
1.2 检查必需程序,如wpa_cli等程序
PS:一般linux发行版都存在,busybox一般也提供,8812的开发包也提供了源码供porting。- 打开wifi接口,如接口“wlan0”
PS:iwlist显示网口状态,如iwlist wlan0 scan|channel|rate|…- iwconfig管理私有ioctl命令
- 认证(可选):
4.1 命令行适用于调试驱动,无法进行wpa认证的,需要认证等需要通过wpa_cli/wpa_supplicant来管理。- 网络参数管理
5.1 使用DHCP或静态管理
(3).操作实例
- 检查、调试运行环境
# 1. 导入必需的环境
tftp -gr 8812bu.ko 192.168.1.10
tftp -gr rtl_hostapd_2G.conf 192.168.1.10
insmod 8812bu.ko
# 2. 关闭可能冲突的环境
/etc/init.d/network stop
killall wpa_supplicant
# 3. 检查配置命令
which ifconfig
which iwconfig
which iwlist
which wpa_supplicant
which wpa_cli
- 打开、配置接口信息
# 1. FW中默认的wifi if名叫“wlan0”
ifconfig wlan0 up
# 2. 查看状态,确认if被打开并默认为manged,cmd & log:
ifconfig wlan0
iwconfig wlan0
- 认证管理(可选)
略
- 网参管理、检查STA状态
# 1. 配置STAmode
iwconfig wlan0 mode Managed
# 2. 连接到AP
# 2.1 通过ESSID
iwconfig wlan0 essid “xxxxxx”
# 2.2 通过 MAC
iwconfig wlan0 ap aa:bb:cc:dd:ee:ff
# 3. 配置参数
# 3.1 手动配置
ifconfig wlan0 192.168.0.11 netmask 255.255.255.0
# 3.2 DHCP,cmd & log 参考如下:
dhclient wlan0
Listening on LPF/wlan0/00:1b:fc:85:5e:1e
Sending on LPF/wlan0/00:1b:fc:85:5e:1e
Sending on Socket/fallback
DHCPREQUEST of 172.21.69.92 on wlan0 to 255.255.255.255 port 67
DHCPACK of 172.21.69.92 from 172.21.69.254
bound to 172.21.69.92 -- renewal in 265914 seconds.
# 4. 检查网络连通性,PASS
参数校准
1. 校准概述
- 需要efuse文件
- 需要私有mask数据文件
2. 校准步骤
(1). 默认efuse写入eeprom
rtwpriv wlan0 mp_start
rtwpriv wlan0 efuse_file /xxxxxxx/wifi_efuse_8812bu.map
rtwpriv wlan0 efuse_get wlrfkmap
rtwpriv wlan0 efuse_mask /xxxxxxx/8812bu_efuse_mask.TXT
rtwpriv wlan0 efuse_set wlfk2map
rtwpriv wlan0 efuse_get realmap
rtwpriv wlan0 mp_stop
remark
- 默认map文件的路径写死在驱动中的,需要编译时指定。
- mask文件是为了适配才添加的,如果map特别准确的话可以不需要。
(2). 需要rtwpriv配置参数(rtwpriv也有坑)
1. 进入MP模式
2. 配置channel等
3. Tx测试步骤汇总
4. Rx测试步骤汇总
issue list
1. kernel module
问题1:rtl_vmalloc()申请失败
改一下task_size,我这里是因为512M DDR的问题。
看下内核的说明“The module space lives between the addresses given by TASK_SIZE and PAGE_OFFSET - it must be within 32MB of the kernel text.”
vi arch/arm/include/asm/memory.h
, 修改如下:
#define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(SZ_32M))
#define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(SZ_32M) - UL(SZ_512M))
#define MODULES_VADDR (PAGE_OFFSET - SZ_32M)
remark:
虽然跟QCA关系不太大,但是个人感觉QCA对512M DDR的支持不太好,其他case也碰到好多奇奇怪怪由DDR导致的问题。
从软件角度考虑,512M DDR 能不用就不用
2. 其他源码相关
问题1:wpa编译报错
编译wpa_xxx修改CC报错路径问题,log如下:
CC wpa_supplicant.c
CC events.c
CC blacklist.c
CC wpas_glue.c
CC scan.c
CC main.c
../src/drivers/driver_nl80211.c:19:31: fatal error: netlink/genl/genl.h: No such file or directory
compilation terminated.
Makefile:1624: recipe for target '../src/drivers/driver_nl80211.o' failed
make: *** [../src/drivers/driver_nl80211.o] Error 1
FIX :
clean后再试试,有依赖关系
问题2:hostapd配置文件报错
修改rtl_hostapd_2g.conf文件中ssid=rtwap参数,直接在句末添加"#xxxxx注释语句xxxxx",导致hostapd读取时报错配置参数有问题
FIX:
修改#注释的问题,不放在同一行,同时注意参数值的后是否有多余的空格等不可见字符,以防出错。
3. 校准相关
(1). rtwpriv mp_xxx 执行时报错
它这个定频一个型号一套参数,扭扭捏捏他们也不解释个一二三。
问题:修改mp_xxx一些参数时直接crash,像是内存报错,应该是ioctl的问题,可以研究下os_dep_service的私有iotctl的程序。
解决:更换8812驱动程序,从"driver_linux_v5.8.7.4
"换成“driver_linux_v5.13.1-27
”就没再报错
分析:暂时没时间分析这个问题,后续看校准情况再决定是否细看版本驱动,做个tag
4. 其他
(1). 调节log_level
参考文档
How_to_set_driver_debug_log_level.pdf
等级定义
enum {
_DRV_NONE_ = 0,
_DRV_ALWAYS_ = 1,
_DRV_ERR_ = 2,
_DRV_WARNING_ = 3,
_DRV_INFO_ = 4,
_DRV_DEBUG_ = 5,
_DRV_MAX_ = 6
};
修改方式
可以在编译时、运行时、加载时修改其log level
- 编译时:
Makefile文件中,
定义CONFIG_RTW_DEBUG=y,打开;
定义CONFIG_RTW_LOG_LEVEL=xxx设置其level值
102 ########################## Debug ###########################
103 CONFIG_RTW_DEBUG = y
104 # default log level is _DRV_INFO_ = 4,
105 # please refer to "How_to_set_driver_debug_log_level.doc" to set the available level.
106 CONFIG_RTW_LOG_LEVEL = 4
- 运行时:
修改proc系统参数,
cmd :
echo 2 > /proc/net/rtl88x2bu/log_level
log :
[ 417.593952] rtw_drv_log_level:2
- 插入时:
传入参数,rtw_drv_log_level=xxx
cmd :
insmod 8812bu.ko rtw_drv_log_level=0
log :
[ 121.686329] usbcore: registered new interface driver rtl88x2bu
插入后查看方式
cat /proc/net/rtl88x2bu/log_level
附件
URL : 待补充
list.log : 整个SDK目录
wlan0dhcp、runwpa、ifcfg-wlan0、clean:SDK自带脚本、参数配置文件
.gitignoe : 自定义的git配置文件,忽略无关的文件