页面标题
GitHub Gitee

在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.ko8188fu.ko 拷贝到开发板目录上(这个目录本身不重要,但还是建议放在 /usr/ko 中)

然后,将 libnl-genl-3.so.200.26.0libnl-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 运行也需要将库文件拷贝到板端,不过那个一般只用来测试吞吐量跟丢包率之类的,如果你不想用的话,不移植也没啥问题

posted @ 2025-03-03 00:04  Wintoki  阅读(326)  评论(3)    收藏  举报