Linux使用wifi(RTL8188EUS)

1综合篇点我
2uboot移植点我
3uboot lcd驱动点我
4kernel移植点我
5kernel lcd驱动点我
6摄像头驱动点我
7ubuntu base移植点我
8挂载网络文件系统点我
9qt移植点我
10搭建qt交叉编译点我
11wifi移植点我

1 删除 linux 内核自带的 RTL8192CU 驱动

linux 内核已经自带了 RTL8192CU/8188CUS 驱动,但是经过测试, linux内核自带的驱动不稳定!因此不建议大家使用。最好使用我的 rtl8188EUS 驱动。在编译之前要先将内核自带的驱动屏蔽掉,否则可能导致编译出错,方法很简单。 打开drivers/net/wireless/rtlwifi/Kconfig,找到下面所示内容然后删除掉:

          drivers/net/wireless/rtlwifi/Kconfig 文件内容
1 config RTL8192CU
2 tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
3 depends on USB
4 select RTLWIFI
5 select RTLWIFI_USB
6 select RTL8192C_COMMON
7 ---help---
8 This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
9 wireless network adapters.
10
11 If you choose to build it as a module, it will be called rtl8192cu

将1 ~11 行内容从 drivers/net/wireless/rtlwifi/Kconfig 中删除掉。
继续打开 drivers/net/wireless/rtlwifi/Makefile, 找到下面这样:

              drivers/net/wireless/rtlwifi/Makefile 文件内容
1 obj-$(CONFIG_RTL8192CU) += rtl8192cu/

将这一行从 drivers/net/wireless/rtlwifi/Makefile 中屏蔽掉,至此, linux内核自带的 RTL8192CU/8188CU 驱动就屏蔽掉了。

2 将 rtl81xx 驱动添加到 Linux 内核中

将 realtek 整个目录拷贝到 ubuntu 下 Linux 内核源码中的 drivers/net/wireless 目录下,此目录下存放着所有 WIFI 驱动文件。拷贝完成以后此目录如图所示:
在这里插入图片描述

3 修改 drivers/net/wireless/Kconfig

打开 drivers/net/wireless/Kconfig,在里面加入下面这一行内容:

source "drivers/net/wireless/realtek-song/Kconfig"

添加完以后的 Kconfig 文件内容如下所示:

                          drivers/net/wireless/Kconfig 文件内容
1 #
2 # Wireless LAN device configuration
3 #
4 
5 menuconfig WLAN
......
286 source "drivers/net/wireless/rsi/Kconfig"
287 source "drivers/net/wireless/realtek-song/Kconfig"
286
289 endif # WLAN

第 287 行就是添加到 drivers/net/wireless/Kconfig 中的内容,这样 WIFI 驱动的配置界面才会出现在 Linux 内核配置界面上。

4 修改 drivers/net/wireless/Makefile

打开 drivers/net/wireless/Makefile,在里面加入下面一行内容:

obj-y += realtek-song/

修改完以后的 Makefile 文件内容如下所示:

示例代码 70.1.1.4 drivers/net/wireless/Makefile 文件内容
1 #
2 # Makefile for the Linux Wireless network device drivers.
3 #
4 5
obj-$(CONFIG_IPW2100) += ipw2x00/
......
62 obj-$(CONFIG_CW1200) += cw1200/
63 obj-$(CONFIG_RSI_91X) += rsi/
64
65 obj-y += realtek-song/

第 65 行,编译 realtek 中的内容,至此, Linux 内核要修改的内容就全部完成了。

5 配置 Linux 内核

在编译 RTL8188 和 RTL8189 驱动之前需要先配置 Linux 内核。

5.1 配置 USB 支持设备

配置路径如下:

-> Device Drivers
	-> <*> USB support
		-> <*> Support for Host-side USB
			-> <*> EHCI HCD (USB 2.0) support
			-> <*> OHCI HCD (USB 1.1) support
			-> <*> ChipIdea Highspeed Dual Role Controller
			-> [*] ChipIdea device controller
			-> [*] ChipIdea host controller

5.2 配置支持 WIFI 设备

配置路径如下:

-> Device Drivers
	-> [*] Network device support
		-> [*] Wireless LAN
			-> <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
				-> [*] Support downloading firmware images with Host AP driver
				-> [*] Support for non-volatile firmware download

5.3 配置支持 IEEE 802.11

配置路径如下:

-> Networking support
	-> -*- Wireless
		-> [*] cfg80211 wireless extensions compatibility
		-> <*> Generic IEEE 802.11 Networking Stack (mac80211)

5.4 配置支持RF

-> Networking support
	-> <*>RF switch subsystem support

6 编译 WIFI 驱动

执行“make menuconfig”命令,打开 Linux 内核配置界面,然后按照如下路径选择将 rtl81xx驱动编译到内核:

-> Device Drivers
	-> Network device support (NETDEVICES [=y])
		-> Wireless LAN (WLAN [=y])
			-><*> Realtek wifi (REALTEK_WIFI [=y])
			-><*> Realtek 8188EUS USB WiFi
			->< > tl8189fs/ftv sdio wifi
			->< > Realtek 8192C USB WiFi
			

在这里插入图片描述

7 执行编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

8 wireless tools 工具移植与测试

8.1 wireless tools 移植

wireless tools 是操作 WIFI 的工具集合,包括一下工具:
①、 iwconfig:设置无线网络相关参数。
②、 iwlist:扫描当前无线网络信息,获取 WIFI 热点。
③、 iwspy:获取每个节点链接的质量。
④、 iwpriv:操作 WirelessExtensions 特定驱动。
⑤、 ifrename:基于各种静态标准命名接口。
我们最常用的就是 iwlist 和 iwconfig 这两个工具,首先获取到相应的源码包,iwlist_for_visteon-master.tar.bz2。将 iwlist_for_visteon-master.tar.bz2 拷贝到 Ubuntu 中前面创建的 tool 目录下,拷贝完成以后将其解压,生成 iwlist_for_visteon-master 文件夹。进入到 iwlist_for_visteon-master 文件夹里面,打开Makefile 文件,修改 Makefile 中的 CC、 AR 和 RANLIB 这三个变量,修改后的值如图所示:
在这里插入图片描述
图中 CC、 AR 和 RANLIB 这三个变量为所使用的编译器工具,将其改为我们所使
用的 arm-linux-gnueabihf-xxx 工具即可。修改完成以后就可以使用如下命令编译:

make clean //先清理一下工程
make //编译

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

8.2 wireless tools 工具测试

这里我们主要测试一下 iwlist 工具,要测试 iwlist 工具,先测试一下 iwlist 工具能不能工作,输入 iwlist 命令,如果输出图所示信息就表明 iwlist 工具工作正常。
在这里插入图片描述

将 RTL8188 WIFI 模块插到开发板的 USB HOST 接口上

ifconfig wlan0 up //打开 wlan0 网卡

wlan0 网卡打开以后就可以使用 iwlist 命令查找当前环境下的 WIFI 热点信息,也就是无线路由器,输入如下命令:

iwlist wlan0 scan

上述命令就会搜索当前环境下的所有 WIFI 热点,然后将这些热点的信息信息答应出来,包括 MAC 地址、 ESSID(WIFI 名字)、频率、速率,信号质量等等。
在这里插入图片描述

9 wpa_supplicant 移植

9.1 openssl 移植

wpa_supplicant 依赖于 openssl,因此需要先移植 openssl,下载好openssl后使用如下命令将其解压:

tar -vxzf openssl-1.1.1d.tar.gz

解压完成以后就会生成一个名为 openssl-1.1.1d 的目录,然后在新建一个名为“openssl”的文件夹,用于存放 arm-openssl 的编译结果。进入到解压出来的 openssl-1.1.1d 目录中,然后执行如下命令进行配置:

./Configure linux-armv4 shared no-asm --prefix=/home/work/third-party/openssl-1.1.1d/arm-openssl CROSS_COMPILE=arm-linux-gnueabihf-

上述配置中“ linux-armv4”表示 32 位 ARM 凭条,并没有“ linux-armv7”这个选项。CROSS_COMPILE 用于指定交叉编译器。配置成功以后会生成 Makefile,输入如下命令进行编译:

make
make install

编译安装完成以后的 openssl 目录内容
在这里插入图片描述

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

sudo cp libcrypto.so* /home/nfs/rootfs/lib/ -af
sudo cp libssl.so* /home/nfs/rootfs/lib/ -af

10 libnl 库移植

在编译 libnl 之前先安装 biosn 和 flex

sudo apt-get install bison
sudo apt-get install flex

wpa_supplicant 也依赖于 libnl,因此还需要移植一下 libnl 库

tar -vxzf libnl-3.2.23.tar.gz

得到解压完成以后会得到 libnl-3.2.23 文件夹,然后在新建一个名为“arm-libnl”的文件夹,用于存放 libnl 的编译结果。进入到 libnl-3.2.23 文件夹中,然后执行如下命令进行配置:

./configure --host=arm-linux-gnueabihf --prefix=/home/work/third-party/libnl-3.2.23/arm-libnl

–host 用于指定交叉编译器的前缀,这里设置为“arm-linux-gnueabihf”, --prefix 用于指定编译结果存放目录,这里肯定要设置为我们刚刚创建的 libnl 文件夹。配置完成以后就可以执行如下命令对 libnl 库进行编译、安装:

make -j12 //编译
make install //安装

编译安装完成以后的 libnl 目录
在这里插入图片描述
ib 目录下的 libnl 库文件,将 lib 目录下的所有文件拷贝到开发板根文件系统的/usr/lib 目录下

sudo cp lib/* /home/nfs/rootfs/usr/lib/ -rf

11 wpa_supplicant 移植

接下来移植 wpa_supplicant,直接解压

tar -vxzf wpa_supplicant-2.7.tar.gz

解压完成以后会得到 wpa_supplicant-2.7 文件夹,进入到此文件夹中, wpa_supplicant-2.7 目录内容
在这里插入图片描述

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

cd wpa_supplicant/
cp defconfig .config

完成以后打开.config 文件,在里面指定交叉编译器、 openssl、 libnl 库和头文件路径,设置如下:

CC = arm-linux-gnueabihf-gcc

#openssl 库和头文件路径


CFLAGS += -I/home/work/third-party/openssl-1.1.1d/arm-openssl/include
LIBS += -L/home/work/third-party/openssl-1.1.1d/arm-openssl/lib -lssl -lcrypto

#libnl 库和头文件路径
CFLAGS += -I/home/work/third-party/libnl-3.2.23/arm-libnl/include/libnl3
LIBS += -L/home/work/third-party/libnl-3.2.23/arm-libnl/lib

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

export PKG_CONFIG_PATH=/home/work/third-party/libnl-3.2.23/libnl/pkgconfig:
$PKG_CONFIG_PATH //指定 libnl 库 pkgconfig 包位置
make -j12 //编

首先我们使用 export 指定了 libnl 库的 pkgconfig 路径,环境变量 PKG_CONFIG_PATH 保存着 pkgconfig 包路径。在 tool/libnl/lib/下有个名为“pkgconfig”的目录,编译 wpa_supplicant 的时候是需要指定 libnl 的 pkgconfig 路径,否则会提示“libnl-3.0”或者“libnl-3.0.pc”找不到等错误。编译完成以后就会在本目录下生成 wpa_supplicant 和 wpa_cli这两个软件,将wpa_cli 和 wpa_supplicant 这两个文件拷贝到开发板根文件系统的/usr/bin目录中,命令如下

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

拷贝完成以后重启开发板!输入“wpa_supplicant -v”命令查看一下 wpa_supplicant 版本号,如果 wpa_supplicant 工作正常的话就会打印出版本号
在这里插入图片描述

12 连接路由

首先测试一下 RTL8188 USB WIFI 联网测试,确保 RTL8188 能扫描出要连接的 WIFI 热点,
比如我要连接“TP_LINK_B01A”这个 WIFI, iwlist 扫描到的此 WIFI 热点信息
在这里插入图片描述
连接的 WIFI 热点扫描到以后就可以连接了,先在开发板根文件系统的/etc 目录下创建一个名为“wpa_supplicant.conf”的配置文件,此文件用于配置要连接的 WIFI 热点以及 WIFI 秘码,比如我要连接到“TP_LINK_B01A”这个热点上,因此 wpa_supplicant.conf 文件内容如下所示:

root@imx6ul:~# cat /etc/wpa_supplicant.conf 
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
 ssid="TP_LINK_B01A"
 psk="xxxxxxxx"
}

ssid 是要连接的 WIFI 热点名字,这里我要连接的是“TP_LINK_B01A”这个 WIFI 热点。
psk 就是要连接的 WIFI 热点密码,根据自己的实际情况填写即可。
注意, wpa_supplicant.conf 文件对于格式要求比较严格,“=”前后一定不能有空格,也不要用 TAB 键来缩进,比如第 4 行和 5 行的缩进应该采用空格,否则的话会出现 wpa_supplicant.conf文件解析错误!最重要的一点! wpa_supplicant.conf 文件内容要自己手动输入,不要偷懒复制粘贴!!!
wpa_supplicant.conf 文 件 编 写 好 以 后 再 在 开 发 板 根 文 件 系 统 下 创 建 一 个“/var/run/wpa_supplicant”目录, wpa_supplicant 工具要用到此目录!命令如下:

mkdir /var/run/wpa_supplicant -p

一切准备好以后就可以使用 wpa_supplicant 工具让 RTL8188 USB WIFI 连接到热点上,输入如下命令:

wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &

当 RTL8188 连接到 WIFI 热点上以后会输出“wlan0: CTRL-EVENTCONNECTED”字样。接下来就是最后一步了,设置 wlan0 的 IP 地址,这里使用 udhcpc 命令从路由器申请 IP 地址,输入如下命令:

udhcpc -i wlan0 //从路由器获取 IP 地址

13 设置开机连接路由

在/etc/init.d/rc.local中添加

ifconfig wlan0 up
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
udhcpc -i wlan0

在这里插入图片描述

14 联网测试

直接ping外网
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值