wifi驱动的移植

使用的wifi模块为SDIO WIFI,芯片为RTL8189FTV,这款产品是给驱动的,只需要将其添加到内核编译,就可以使用。

使用RTL8XXX WIFI 驱动源码-> realtek 将这个目录包放入Linux 内核源码中的 drivers/net/wireless 目录下,此目
录下存放着所有 WIFI 驱动文件 。

修改 drivers/net/wireless/Kconfig

打开这个文件在最后加入

1
source "drivers/net/wireless/realtek/Kconfig"

添加到 drivers/net/wireless/Kconfig 中的内容

修改 drivers/net/wireless/Makefile

打开文件在最后加入

1
obj-y += realtek/

这样就能在内核菜单中配置它这个选项了。

配置内核

配置wifi

配置支持IEEE802.11

最后编译WIFI驱动

使用sdio wifi,最后保存配置。

此时将设备启动,使用命令查看网卡

当然最后的wlan0是配好的了,没配好的时候它没有ip地址。

现在开始移植使用的工具了。

wireless tools 工具移植与测试

wireless tools 是操作 WIFI 的工具集合,包括一下工具:

①、 iwconfig:设置无线网络相关参数。
②、 iwlist:扫描当前无线网络信息,获取 WIFI 热点。
③、 iwspy:获取每个节点链接的质量。
④、 iwpriv:操作 WirelessExtensions 特定驱动。
⑤、 ifrename:基于各种静态标准命名接口。

下载iwlist_for_visteon-master.tar.bz2源码包,进入到 iwlist_for_visteon-master 文件夹里面,打开Makefile 文件,修改 Makefile 中的 CC、 AR 和 RANLIB 这三个变量 。

1
2
3
CC = arm-linux-gnueabihf-gcc
AR = arm-linux-gnueabihf-ar
RANLIB = arm-linux-gnueabihf-ranlib
1
2
make clean
make

编译完成以后就会在当前目录下生成 iwlist、 iwconfig、 iwspy、 iwpriv、 ifrename 这 5 个工具,另外还有很重要的 libiw.so.29 这个库文件。将这 5 个工具拷贝到开发板根文件系统下的/usr/bin 目录中.

1
2
sudo cp iwlist iwconfig iwspy iwpriv ifrename /home/moss/linux/nfs/rootfs/usr/bin/ -f
sudo cp libiw.so.29 /home/moss/linux/nfs/rootfs/usr/lib/ -f

wpa_supplicant 移植

下载源码openssl-1.1.1d.tar.gz,解压并配置

1
2
3
4
tar -vxzf openssl-1.1.1d.tar.gz
./Configure linux-armv4 shared no-asm --prefix=/home/moss/linux/tool/openssl CROSS_COMPILE=arm-linux-gnueabihf-
make
make install

将 lib 目录下的 libcrypto 和 libssl 库拷贝到开发板根文件系统中的/usr/lib 目录下

1
2
sudo cp libcrypto.so* /home/moss/linux/nfs/rootfs/lib/ -af
sudo cp libssl.so* /home/moss/linux/nfs/rootfs/lib/ -af

libnl 库移植

在编译 libnl 之前先安装 biosn 和 flex ,这个在boa服务器里安装过,就是用命令就行,解压后配置

1
2
3
4
tar -vxzf libnl-3.2.23.tar.gz
。/configure --host=arm-linux-gnueabihf --prefix=/home/moss/linux/tool/libnl/
make -j12 //编译
make install //安装

wpa_supplicant 移植

下载源码并解压

1
tar -vxzf wpa_supplicant-2.7.tar.gz

进入到 wpa_supplicant 目录下,然后进行配置, wpa_supplicant 的配置比较特殊,需要将 wpa_supplicant 下的 defconfig 文件拷贝一份并重命名为.config

1
2
cd wpa_supplicant/
cp defconfig .config

之后更改.config文件

1
2
3
4
5
6
7
CC = arm-linux-gnueabihf-gcc
#openssl 库和头文件路径
CFLAGS += -I/home/zuozhongkai/linux/IMX6ULL/tool/openssl/include
LIBS += -L/home/zuozhongkai/linux/IMX6ULL/tool/openssl/lib -lssl -lcrypto
#libnl 库和头文件路径
CFLAGS += -I/home/zuozhongkai/linux/IMX6ULL/tool/libnl/include/libnl3
LIBS += -L/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib

.config 文件配置好以后就可以编译 wpa_supplicant 了,使用如下命令编译

1
2
export PKG_CONFIG_PATH=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib/pkgconfig: $PKG_CONFIG_PATH //指定 libnl 库 pkgconfig 包位置
make -j12 //编译

将生成的wpa_cli 和 wpa_supplicant 这两个文件拷贝到开发板根文件系统的/usr/bin目录中

1
sudo cp wpa_cli wpa_supplicant /home/moss/linux/nfs/rootfs/usr/bin/ -f

工具移植完了开始使用。

WIFI 联网测试

先在开发板根文件系统的/etc 目录下创建一个名为“wpa_supplicant.conf”的配置文件,此文件用于配置要连接的 WIFI 热点以及 WIFI 密码。

1
2
3
4
5
6
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="ZZK"
psk="xxxxxxxx"
}

wpa_supplicant.conf 文 件 编 写 好 以 后 再 在 开 发 板 根 文 件 系 统 下 创 建 一 个“/var/run/wpa_supplicant”目录, wpa_supplicant 工具要用到此目录!

1
mkdir /var/run/wpa_supplicant -p

开始测试

先是打开网卡

1
2
3
ifconfig wlan0 up
wpa_supplicant -Dnl80211 -c /etc/wpa_supplicant.conf -i wlan0 & #连接wifi
udhcpc -i wlan0 #获取IP地址

正常这里就好使了,可以ping通外网了,但是如果你使用的根文件系统是busybox生成的,那就会出问题,ip地址可以获取但是设置不上,就是你使用命令ifconfig -a,发现你的wlan0网卡没有ip地址,但你的udhcpc没有报错。

这就是写这篇博客的意义所在,如果你不是这个busybox的根文件系统就没有问题,只能说我每回学东西都踩一个坑,下面是解决方案:

首先还是下载busybox的源码包,将busybox-1.xx.x/examples/udhcp/目录下的simple.script文件(注意不是sample.script)拷贝到根文件系统的/usr/share/udhcpc/目录下,将它重命名为default.script,并且chmod +x default.script加上可执行权限即可。

重新获取ip地址就可以了联网了。