在Hi3519DV500上移植USB无线网卡
在Hi3519DV500上移植USB无线网卡
这里以瑞昱RTL8188FU/FTV为例:
1. 内核配置
进入 open_source/linux/linux-5.10.y,执行 make ARCH=arm64 CROSS_COMPILE=aarch64-v01c01-linux-gnu- menuconfig,修改 Linux 内核配置:

1.1 配置 CFG80211
进入 Networking support->Wireless,按照如图所示配置:

1.2 配置 Wireless Extension 和 USB 配置
按照海思 Hi3516 Wifi使用指南的说法,WEXT 是内核中 WiFi 驱动和用户态进程的标准接口,调试工具 iwconfig、iwlist、iwpriv 需要使用该接口。如果没有配置该接口,有些驱动会有编译错误。
WEXT 在内核配置中没有单独的配置项,只能通过打开依赖它的配置项来间接打开。
配置了 CFG80211 后,进入 Device Drivers->Network device support->Wireless LAN,
根据图中红色箭头的示意进行配置:

上图这部分不知道干嘛的,不管了,先配置上再说,重点在下图

如果找不到这项配置,需要先配置好 USB 再来配置该选项,配置参考下面几张图:




上面最后这张应该也没啥用,不过既然内核配置他们默认是开启的,那最好别动
1.3 配置通用 GPIO
开启 Device Drivers->GPIO Support,并进入子选项

按如下图所示配置:

然后进入 Memory mapped GPIO drivers,按下图配置:

内核配置好后,执行
make ARCH=arm64 CROSS_COMPILE=aarch64-v01c01-linux-gnu- uImage -j 20
make ARCH=arm64 CROSS_COMPILE=aarch64-v01c01-linux-gnu- modules -j 20
编译内核及 mac80211 驱动,然后从 net/wireless 中单独拷贝出 cfg80211.ko 文件
2. 驱动移植
从瑞昱官方或者模组厂家获取驱动,或者从这几个地方下载:kelebek333/rtl8188fu: RTL8188FU driver for Linux 4.15.x ~ 6.8.x (github.com)
rtl8188FU_linux_v5.15.3-6-g1a2e952f9.20230217.tar.gz_免费高速下载|百度网盘-分享无限制 (baidu.com)
https://pan.baidu.com/s/13AayimU-WPNNAw-yAYjemw (提取码:DQR8)
对.tar.gz 压缩包进行 tar -zxvf 解压,得到代码目录,
修改文件 realtek-wlan-rtl8188fu/include/autoconf.h,去掉驱动打印,取消以下这一行(大约38行的位置)的注释:
#define CONFIG_IOCTL_CFG80211
取消以下这一行(大约46行的位置)的注释 :
#define RTW_USE_CFG80211_STA_EVENT /* Indicate new sta asoc through cfg80211_new_sta */
修改 Makefile,首先设置 CONFIG_RTW_DEBUG = n ,然后按下面几张图配置修改:

在下图新建配置选项:

在下图红色标识的地方填写平台、交叉编译器选项、内核路径、驱动名称等:

ifeq ($(CONFIG_PLATFORM_HISILICON_HI3519DV500), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_HISILICON
ifeq ($(SUPPORT_CONCURRENT),y)
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
endif
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
ARCH := arm64
ifeq ($(CROSS_COMPILE),)
CROSS_COMPILE = aarch64-v01c01-linux-gnu- #根据自己的设备修改交叉编译器
endif
MODULE_NAME := 8188fu
ifeq ($(KSRC),)
KSRC := /home/hisi-terminal/Hi3519DV500_SDK_V2.0.1.1/open_source/linux/linux-5.10.y
#根据自己的设备修改内核路径
endif
INSTALL_PREFIX := /home/hisi-terminal/RTL8188-drv #安装文件位置,不过我们只需要编译后的.ko文件,所以好像没啥用
endif
之后直接执行:make -j8 即可,我们就在源码目录下得到了 8188fu.ko 文件。
3. 板端 WIFI 工具移植
不同于 Ubuntu、Cent OS 等发行版系统,我们需要自行编译各种 Wifi 工具。
3.1 libnl 移植
首先移植 libnl,下载好合适的版本并解压(我这里用的是3.5,Releases · thom311/libnl (github.com) )
libnl-3.11.0 (linuxfromscratch.org)
./autogen.sh
./configure --host=aarch64-v01c01-linux-gnu --prefix=/home/hisi-terminal/arm_libnl
# --host 用于指定交叉编译器的前缀,--prefix 用于指定编译结果存放目录,自己新建一个即可
make
make install
然后到你新建的目录去查看即可,我们最终用的是里面的头文件和特定库文件。
3.2 openssl 移植
下载合适的版本,这里以 openssl-1.1.1d.tar.gz (Old 1.1.1 Releases | OpenSSL Library (openssl-library.org))为例。
解压,进入目录:
./Configure linux-generic32 no-asm shared no-async --prefix=/home/hisi-terminal/arm_openssl CROSS_COMPILE=aarch64-v01c01-linux-gnu-
make
make install
得到 openssl 的各种头文件、库文件......
到了这一步其实你还可以顺手移植一下 curl,实现在开发板上的 http 访问什么的......
这里跟这篇文章的主题无关就不写了。
3.3 wpa_supplicant 移植
wpa_supplicant 编译需要 openssl 和 libnl 的库文件,确保你已经执行了前面两步。
这里以 wpa_supplicant-2.10 (Index of /releases (w1.fi))为例,解压,进入 wpa_supplicant-2.10/wpa_supplicant 目录:
首先将 wpa_supplicant 下的 defconfig 文件拷贝一份并重命名为 .config
完成后打开 .config 文件,首先做如下配置修改:

这里需要对应相应的 libnl 版本,并确认 WEXT 和 80211 选项是否打开
然后,在 Makefile 里面指定 openssl、libnl 库、头文件路径:
CFLAGS = -I/home/hisi-terminal/arm_openssl/include
CFLAGS += -I/home/hisi-terminal/arm_libnl/include
CFLAGS += -I/home/hisi-terminal/libnl-libnl3_5_0/include/linux-private
CFLAGS += -I/home/hisi-terminal/arm_libnl/include/libnl3
LIBS = -L/home/hisi-terminal/arm_openssl/lib
LIBS_p = -L/home/hisi-terminal/arm_openssl/lib
LIBS += -L/home/hisi-terminal/arm_libnl/lib
临时指定 libnl 的 pkgconfig 路径,然后编译:
export PKG_CONFIG_PATH=/home/hisi-terminal/arm_libnl/lib/pkgconfig:$PKG_CONFIG_PATH
make CC=aarch64-v01c01-linux-gnu-gcc -j8
然后,成功在之前的目录(wpa_supplicant-2.10/wpa_supplicant)编译 wpa_cli 和 wpa_supplicant 这两个文件。
如果有将开发板设置为 AP 的需求,在刚才的网站还可以下载 hostapd 的源码,操作方法类似。
3.4 iwconfig、iwlist、iwpriv 等工具移植
下载源码(http://www.linuxfromscratch.org/blfs/view/svn/basicnet/wireless_tools.html),解压,进入目录
链接里有补丁,可以通过
patch命令给源码打上补丁,不过我这里打补丁失败了,我也没管,好像没啥问题......
修改 Makefile:
## Compiler to use (modify this for cross compile).
CROSS_COMPILE = /opt/linux/x86-arm/aarch64-v01c01-linux-gnu-gcc/bin/aarch64-v01c01-linux-gnu-
CC = $(CROSS_COMPILE)gcc
## Other tools you need to modify for cross compile (static lib only).
AR = $(CROSS_COMPILE)ar
RANLIB = $(CROSS_COMPILE)ranlib
然后
make
sudo make PREFIX=/home/hisi-terminal/wire_install/ install
即可生成 iwconfig、iwlist、iwpriv 等工具的可执行文件。
3.5 iperf 的移植
下载源码(Index of /pub/iperf/ (es.net)),解压,进入目录。
配置:
./configure --host=aarch64-v01c01-linux-gnu --prefix=/home/hisi-terminal/iperf-3.1
make
make install
3.6 wireless-regdb
wireless-regdb 是一个开源的工程,是一个加密后的数据库,它记录各个国家可用的无线频段。
可以从这里下载文件:kernel/git/sforshee/wireless-regdb.git - Wireless regulatory database for CRDA
或 https://pan.baidu.com/s/1XCQr0acE99SgQoJNEwDNNQ (提取码: DQR8)
下载好之后不需要编译,直接复制以下的几个文件,留作备用:

4. 载入文件
这里建议先拷贝到 PC 机上用来生成 rootfs 镜像的根文件目录内,然后再生成镜像并烧写
将 cfg80211.ko 和 8188fu.ko 拷贝到开发板目录上(这个目录本身不重要,但还是建议放在 /usr/ko 中)
然后,将 libnl-genl-3.so.200.26.0 和 libnl-3.so.200.26.0 拷贝到单板的 /lib 目录,然后,生成新的软链接
ln –s libnl-genl-3.so.200.26.0 libnl-genl-3.so.200
ln –s libnl-3.so.200.26.0 libnl-3.so.200
如果你比较懒的话,直接把编译好的整个
arm_libnl/lib内所有文件都拷贝过去(如果开发板内存够大)也不是不行,比如:
cp -r /home/hisi-terminal/arm_libnl/lib/* /home/hisi-terminal/....../rootfs/usr/lib/libnl这里将所有文件拷贝到了 PC 机上用来生成 rootfs 镜像的根文件目录内,并且和其他库文件分开了(需要修改
profile文件内环境变量)文件名可能不太一样,具体视你的 libnl 源码版本而定
拷贝 iwconfig、iwlist、iwpriv、iperf 拷贝到单板的 /sbin 目录下。
将 wpa_supplicant、wpa_cli 也一并拷贝到单板的 /sbin 目录下。
有必要的话,为他们全部赋予可执行权限,例如:
chmod a+x wpa_supplicant
然后,新建 wpa_supplicant.conf,它是启动 wpa_supplicant 进程时需要使用到的配置文件。可以在单板上新建一个,目录不重要,比如放在 /etc/Wireless 目录下。文件内容如下:
ctrl_interface=/var/wpa_supplicant
然后,将之前 wireless-regdb 那几个文件拷贝到单板 /lib/firmware 内
5. WiFi 设备检测
启动后,首先将开发板的 USB 模式改为 host:echo host > /proc/10320000.usb30drd/mode
然后执行 lsusb 命令,出现 USB ID 即为识别到设备:

然后,加载驱动:
insmod cfg80211.ko
insmod 8188fu.ko
iwconfig
如果看到如下图示,即为成功

USB 模式修改、加载驱动启用无线网卡这几步,可以写在自启动脚本内(例如:/etc/init.d/S99autorun)
6. WIFI 基本操作(STA模式)
首先,执行命令:ifconfig wlan0 up 启用无线网卡,
然后,执行 iwlist wlan0 scan 扫描附近的 AP。
然后,准备将你要连接的 AP 写在 wpa_supplicant.conf 内:
ctrl_interface=/var/wpa_supplicant
network={
ssid="Hi_Test"
psk="20008888"
}
执行:wpa_supplicant -i wlan0 -c /etc/Wireless/wpa_supplicant.conf & 即连接 AP
可通过 ifconfig 指令给 wlan0 手动分配静态 IP 和网关,也可以通过 udhcpc 工具自动配置
手动分配示例:
ifconfig wlan0 192.168.56.100
ip route add default via 192.168.56.1 dev wlan0
然后,在 /etc 文件夹下生成 resolv.conf 配置文件,用作域名解析服务器:
nameserver 114.114.114.114
nameserver 8.8.8.8
可以 ping www.baidu.com 作为测试。
SoftAP 模式这里略过,具体可以去看海思的 Hi3516 版《Wifi使用指南》(Hi3519DV500 的手册里没有这本)
另外,iperf3 运行也需要将库文件拷贝到板端,不过那个一般只用来测试吞吐量跟丢包率之类的,如果你不想用的话,不移植也没啥问题

浙公网安备 33010602011771号