前言
前面有尝试移植 MT6620 WiFi 驱动到 xhr4412 上,不过由于官方驱动对应的内核版本过于古老,一直到现在 linux-5.8.5 上可能耗时较长,且没有 know-how 不知道如何验证是否成功,所以先尝试使用其他无线网卡。
正好手上有一块 usb 无线网卡,发现内核中有它的驱动,那么先使用它来尝试使用 WiFi,之后再看能否使用 MT6620 。
一、内核网卡驱动
1. 配置
首先将 usb 无线网卡插到 Ubuntu 上,使用命令 lsusb
查看网卡的设备号。
Bus 001 Device 002: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
然后到 xhr4412-linux-5.8.5/
中搜索是否有该网卡驱动。
grep -wnr 0x3070 drivers/
其中搜索到一条:
drivers/net/wireless/ralink/rt2x00/rt2800usb.c:948: { USB_DEVICE(0x148f, 0x3070) },
看来内核支持该网卡驱动,剩下的便是将它编译到 xhr4412-uImage.bin
。
查看 Makefile 得知编译该文件需要打开配置 CONFIG_RT2800USB
。
obj-$(CONFIG_RT2800USB) += rt2800usb.o
2. 测试
启动开发板后,插入 usb 网卡,可以看到以下信息。
二、libnl
hostapd : user space daemon for access points, including, e.g., IEEE 802.1X/WPA/EAP Authenticator for number of Linux and BSD drivers, RADIUS client, integrated EAP server, and RADIUS authentication server
直译为: AP侧进程,包含:如 linux和BSD 驱动中的802.1x/WPA/EAP认证功能,RADIUS客户端,整合了EAP服务器和RADIUS认证服务器。
也就是说,hostapd是一个AP侧使用的进程,它的功能包含了802.1x、RADIUS认证等的处理。
wpa_supplicant: user space IEEE 802.1X/WPA supplicant (wireless client) for number of Linux, BSD, and Windows drivers
直译为: 用户空间802.1x/WPA请求者(无线client端),适用于linux /BSD/Windows驱动
也就是说,wpa_supplicant是一个client侧使用的进程,它包含了802.1x、WPA的请求工作。
hostapd 和 wpa_supplicant 都需要 openssl 和 libnl ,openssl 前面已经移植完成,现在只需要先移植 libnl。
- 官方网站:http://www.infradead.org/~tgr/libnl/
- 当前最新稳定版:libnl-3.2.25.tar.gz (Released on Jul 16, 2014)
另外补充一下文档不在源代码压缩包中,需要在官网下载 libnl-doc-3.2.25.tar.gz
。需要知道怎么 build 和 install,需要执行命令 ./configure --help > INSTALL
。
tar zxvf libnl-3.2.25.tar.gz
./configure --prefix=$(pwd)/__install --host=arm-none-linux-gnueabihf
make
make install
三、wpa_supplicant
-
目前最新版本:wpa_supplicant-2.9.tar.gz
1. build
(1) get source
tar zxvf wpa_supplicant-2.9.tar.gz
cd wpa_supplicant-2.9/wpa_supplicant
cp -p defconfig .config
(2) modify .config
设置 libnl 和 openssl 库路径。
echo "CC=arm-none-linux-gnueabihf-gcc -L/home/xhr/iTop4412/xhr4412/ssh/openssl/openssl-1.1.1h/out/install/lib -L/home/xhr/iTop4412/xhr4412/wifi/libnl/libnl-3.2.25/__install/lib" >> .config
echo "CFLAGS += -I/home/xhr/iTop4412/xhr4412/wifi/libnl/libnl-3.2.25/__install/include/libnl3" >> .config
echo "LIBS += -L/home/xhr/iTop4412/xhr4412/wifi/libnl/libnl-3.2.25/__install/lib" >> .config
echo "CFLAGS += -I/home/xhr/iTop4412/xhr4412/ssh/openssl/openssl-1.1.1h/out/install/include" >> .config
echo "LIBS += -L/home/xhr/iTop4412/xhr4412/ssh/openssl/openssl-1.1.1h/out/install/lib" >> .config
然后注释掉两个选项:
CONFIG_CTRL_IFACE_DBUS_NEW=y
CONFIG_CTRL_IFACE_DBUS_INTRO=y
(3) make
make
成功后就生成了两个可执行文件:wpa_supplicant
和 wpa_cli
。wpa_supplicant
用于连接 wifi,并作为服务端与 wpa_cli
通信。通过 wpa_cli
发送命令到 wpa_supplicant
执行 wifi 的连接、控制等。
2. rootfs
(1) wpa
- 将
wpa_supplicant
和wpa_cli
拷贝到${rootfs}/usr/bin/
下。
(2) libnl
cd /home/xhr/iTop4412/xhr4412/wifi/libnl/libnl-3.2.25/__install/lib
cp -pd *so* ${rootfs}/lib
(3) rt2870.bin
还需要 rt2870.bin
,这个可以从 ubuntu /lib/firmware/
目录下找到,拷贝到 xhr4412
相同目录即可。
(4) wpa_supplicant.conf
mkdir -p /var/run/wpa_supplicant
vim /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
ssid="ChinaNet-te3z"
psk="dtkxzxnv"
}
3. test
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B
ifconfig wlan0 192.168.1.178
#route add default gw 192.168.1.1
到这一步就可以 ping 我的物理机了。
hostapd & dhcp
- 官方网站:http://w1.fi/hostapd/
- 目前最新版本:hostapd-2.9.tar.gz
这两个可能以后在其他文章介绍,@_@ 这篇文章 delay 了好久,因为前几周都去玩去了。。
参考
- C头文件中尖括号与双引号的区别及编译搜索顺序
- 嵌入式Linux开发板使用WIFI无线网卡访问互联网和作为个人热点
- 右键快捷方式启动程序时添加启动参数的方法——以修改VSCode工作区存储目录…\AppData\Roaming\Code为例
- vscode占用内存爆满
- wpa_supplicant详解
- wpa_supplicant 移植和使用
- wpa_supplicant和hostapd的定义和区别
- libnl 移植到ARM Linux
- configure配置脚本的使用
- 编译wpa_supplicant
- glib-dbus 在ubuntu9.10 和 ubuntu10.04 上安装环境的搭建
- 移植wpa_supplicant工具到arm linux平台
- wpa_supplicant交叉编译
- rt3070 驱动异常问题 rt2870.bin
- wpa_supplicant的用法
- wpa_supplicant 常用操作
- wpa_supplicant 的配置说明文件 wpa_supplicant.conf 译文