I.MX6ULL 手册查找使用方法 实战点亮LED(寄存器版)
I.MX6ULL 手册查找使用方法 实战点亮LED(固件库版本)
linux 字符设备驱动实战
linux LED设备驱动文件
linux 设备树(.dts)实战解析
linux 使用设备树点亮LED 实战
linux 驱动中并发与竞争
linux 内核定时器
linux 内核中断理解
linux 驱动阻塞和非阻塞
linux 内核异步通知
linux platform驱动框架
linux 内核自带的LED灯驱动
linux misc设备驱动
linux input子系统
linux 深入理解I2C内核驱动
linux SPI 驱动

驱动简介

RTL8188EUS, usb无线网卡驱动

源码 RTL8188EUS
在这里插入图片描述

Kconfig是文件WIFI驱动的配置界面文档,图形界面配置文件
内容如下:

menuconfig REALTEK_WIFI
	tristate "Realtek wifi"	

if REALTEK_WIFI

choice 
	prompt "select wifi type"
	default RTL8189FS

config RTL8189FS
	depends on REALTEK_WIFI
	tristate "rtl8189fs/ftv sdio wifi"

config RTL8188EUS
	depends on REALTEK_WIFI
	tristate "rtl8188eus usb wifi"	

config RTL8192CU
	depends on REALTEK_WIFI
	tristate "Realtek 8192C USB WiFi"

endchoice 
endif

删除内核自带的RTL8192CU驱动

内核自带的RTL8192CU驱动不稳定需要删除,内核源码中,drivers/net/wireless/rtlwifi/Kconfig 删除

config RTL8192CU
tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
depends on USB
select RTLWIFI
select RTLWIFI_USB

select RTL8192C_COMMON
---help---
This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
wireless network adapters.

If you choose to build it as a module, it will be called rtl8192cu

drivers/net/wireless/rtlwifi/Makefile

obj-$(CONFIG_RTL8192CU) += rtl8192cu/

添加源码驱动

  1. 拷贝源码文件到内核文件中

2)修改Kconfig文件
打开 drivers/net/wireless/Kconfig
添加

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

这样WIFI驱动的配置界面才会出现在linux内核配置界面上

3)修改Makefile文件
打开 drivers/net/wireless/Makefile
添加

obj-y += realtek/

编译realtek中的程序。

配置linux内核

配置RTL8188驱动,先要配置USB,WIFI,802.11内核中的支持。

配置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

配置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

配置IEEE 802.11支持

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

编译WIFI驱动
将rtl81xx编译为驱动模块

-> Device Drivers 
	-> Network device support (NETDEVICES [=y]) 
		 -> Wireless LAN (WLAN [=y]) 
			 -> Realtek wifi (REALTEK_WIFI [=m]) 
				 -> (M) select wifi type
				 -> (M) rtl8189fs/ftv sdio wifi 
				 -> (M) rtl8188eus usb wifi 
				 -> (M) Realtek 8192C USB WiFi 

执行编译命令

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

在 rtl8189FS,rtl8188EUS,rtl8192CU目录下有相应的.ko文件生成。并将.ko文件复制到开发版的目录/lib/modules/4.1.15中

驱动加载:

depmod
modprobe 8188cu.ko
modprobe 8192cu.ko
root@ATK-IMX6U:~# modprobe 8188eu
root@ATK-IMX6U:~# modprobe 8192cu
[  182.035128] usbcore: registered new interface driver rtl8192cu

查看网卡是否存在,一般是wlan0

ifconfig -a  
...
wlan0     Link encap:Ethernet  HWaddr 00:13:ef:f1:3d:54
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

如何上网,需要移植工具 wirless tools

wirless tools移植

源码包: iwlist_for_visteon-master.tar.bz2
解压后Makefile修改变量

## Compiler to use (modify this for cross compile).
CC = arm-linux-gnueabihf-gcc
## Other tools you need to modify for cross compile (static lib only).
AR = arm-linux-gnueabihf-ar
RANLIB = arm-linux-gnueabihf-ranlib
make clean
make

生成 iwlist、iwconfig、iwspy、iwpriv、ifrename 这 5 个工具,还有 libiw.so.29 这个库文件。

工具复制到/usr/bin 目录下,libiw.so.29复制到/usr/lib 目录下

工具测试:


root@ATK-IMX6U:~# iwlist
Usage: iwlist [interface] scanning [essid NNN] [last]
              [interface] frequency
              [interface] channel
              [interface] bitrate
              [interface] rate
              [interface] encryption
              [interface] keys
              [interface] power
              [interface] txpower
              [interface] retry
              [interface] ap
              [interface] accesspoints
              [interface] peers
              [interface] event
              [interface] auth
              [interface] wpakeys
              [interface] genie
              [interface] modulation

root@ATK-IMX6U:~# ifconfig wlan0 up
[  595.734197] ==> rtl8188e_iol_efuse_patch
[  596.192262] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
root@ATK-IMX6U:~# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 0C:72:2C:FD:2E:BD
                    ESSID:"TP-LINK_2.4GHz_FD2EBD"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.437 GHz (Channel 6)
                    Encryption key:on
                    Bit Rates:300 Mb/s
                    Extra:wpa_ie=dd160050f20101000050f20401000050f20401000050f202
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Extra:
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD940050F204104A0001101044000102103B0001031047001019679A75CA6B508686663B369BF4B3E21021000754502D4C494E4B1023000A544C2D5744523735303010240003322E301042000A313233343536373839301054000800060050F20400011011001A576972656C65737320526F7574657220544C2D57445237353030100800022008103C0001031049000600372A000120
                    Quality=48/100  Signal level=74/100
                    Extra:fm=0003

扫描结果,热点名字:"TP-LINK_2.4GHz_FD2EBD"可以连接。连接需要使用wpa_supplicant工具。

wps_supplicant移植

openssl工具移植

源码 openssl-1.1.1d.tar.gz

tar -vxzf openssl-1.1.1d.tar.gz

在openssl文件夹下执行配置文件

./Configure linux-armv4 shared no-asm --prefix=/home/wy/imx6ull/tools/openssl CROSS_COMPILE=arm-linux-gnueabihf-

prefix:安装的目录

make 
make install

将/home/wy/imx6ull/tools/openssl/lib文件夹下的 libcrypto 和 libssl 库,拷贝到开发版/lib中

cp  libcrypto.so*  /lib/ -af
cp  libssl.so*  /lib/ -af

libnl库移植

源码 libnl-3.2.23.tar.gz
先安装 biosn 和 flex

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

源码文件libnl-3.2.23.tar.gz

tar -vxzf libnl-3.2.23.tar.gz

执行配置文件

./configure --host=arm-linux-gnueabihf --prefix=/home/wy/imx6ull/tools/libnl/

拷贝生成的/home/wy/imx6ull/tools/libnl/lib目录到开发版/usr/lib目录下

o cp lib/*  /usr/lib/ -rf

wpa_supplicant移植

源码 wpa_supplicant-2.7.tar.gz

tar -vxzf wpa_supplicant-2.7.tar.gz

进入解压后的文件,进入wpa_supplicant子文件夹
要将 wpa_supplicant 下的 defconfig 文件拷贝一份并重命名为.config并进入配置

#openssl库文件和头文件
CFLAGS += -I/home/wy/imx6ull/tools/openssl/include
LIBS += -L/home/wy/imx6ull/tools/openssl/lib -lssl -lcrypto
#libnl库文件和头文件
CFLAGS += -I/home/wy/imx6ull/tools/libnl/include/libnl3
LIBS += -L/home/wy/imx6ull/tools/libnl/lib

CC=arm-linux-gnueabihf-gcc

到出环境变量PKG_CONFIG_PATH

export PKG_CONFIG_PATH=/home/wy/imx6ull/tools/libnl/lib/pkgconfig

编译

make -j12

目录下会生成wpa-supplicantwpa_cli两个可执行文件,复制到开发版/usr/bin目录下

开发板下,查看wpa_supplicant 版本

root@ATK-IMX6U:~# wpa_supplicant -v
wpa_supplicant v2.7
Copyright (c) 2003-2018, Jouni Malinen <j@w1.fi> and contributors

在/etc目录下新建 “wpa_supplicant.conf”的配置文件,
设置网络名ssid,和密码psk

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
        ssid="TP-LINK_2.4GHz_FD2EBD"
        psk="15869151017"
}

创建一个新的目录

mkdir /var/run/wpa_supplicant -p

测试上网功能

wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
[ 2065.431974] RTL871X: set bssid:00:00:00:00:00:00
ioctl[SIOCSIWAP]: Operation not p[ 2065.438524] RTL871X: set ssid [p▒>▒A▒▒g>~▒▒▒k▒▒8\*▒;▒2▒<T▒▒\▒▒▒▒펀▒] fw_state=0x00000008
ermitted
wlan0: CTRL-EVENT-DISCONNECTED bssid=0c:72:2c:fd:2e:bd reason=3 locally_generated=1
wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="TP-LINK_2.4GHz_FD2EBD" auth_failures=1 duration=10 reason=CONN_FAILED
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
[ 2066.770343] RTL871X: indicate disassoc
wlan0: CTRL-EVENT-SSID-REENABLED [ 2077.183469] RTL871X: set ssid [TP-LINK_2.4GHz_FD2EBD] fw_state=0x00000008
id=0 ssid="TP-LINK_2.4GHz_FD2EBD"[ 2077.192950] RTL871X: set bssid:0c:72:2c:fd:2e:bd

wlan0: Trying to associate with 0c:72:2c:fd:2e:bd (SSID='TP-LINK_2.4GHz_FD2EBD' freq=2437 MHz)
[ 2077.308041] RTL871X: start auth
[ 2077.313502] RTL871X: auth success, start assoc
[ 2077.328205] RTL871X: assoc success
[ 2077.331927] RTL871X: recv eapol packet
wlan0: Associated with 0c:72:2c:fd:2e:bd
[ 2077.349569] RTL871X: send eapol packet
[ 2077.357809] RsvdPageNum: 8
[ 2077.361396] RTL871X: recv eapol packet
[ 2077.367405] RTL871X: send eapol packet
wlan0: WPA: Key negotiation completed with 0c:72:2c:fd:2e:bd [PTK[ 2077.376877] RTL871X: set pairwise key camid:4, addr:0c:72:2c:fd:2e:bd, kid:0, type:AES
=CCMP GTK=CCMP]
wlan0: CTRL-EVENT-CONNECTED - Connection to 0c:72:2c:fd:2e:bd completed [id=0 id[ 2077.391572] RTL871X: set group key camid:5, addr:0c:72:2c:fd:2e:bd, kid:2, type:AES

需要几秒钟的时间,最终有 CTRL-EVENT-CONNECTED 连接状态

动态获取IP地址

udhcpc -i wlan0
root@ATK-IMX6U:~# udhcpc -i wlan0
udhcpc (v1.24.1) started
Sending discover...
Sending select for 192.168.11.107...
Lease of 192.168.11.107 obtained, lease time 7200
/etc/udhcpc.d/50default: Adding DNS 192.168.11.1

查看网卡信息

root@ATK-IMX6U:~# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:13:ef:f1:3d:54
          inet addr:192.168.11.107  Bcast:192.168.11.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19703 errors:0 dropped:98 overruns:0 frame:0
          TX packets:19654 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1749865 (1.6 MiB)  TX bytes:952586 (930.2 KiB)

访问外网 ping


root@ATK-IMX6U:~# ping www.baidu.com
PING www.a.shifen.com (180.101.49.12) 56(84) bytes of data.
64 bytes from 180.101.49.12: icmp_seq=1 ttl=52 time=17.8 ms
64 bytes from 180.101.49.12: icmp_seq=2 ttl=52 time=25.5 ms
64 bytes from 180.101.49.12: icmp_seq=3 ttl=52 time=15.9 ms
64 bytes from 180.101.49.12: icmp_seq=4 ttl=52 time=26.0 ms
64 bytes from 180.101.49.12: icmp_seq=5 ttl=52 time=15.6 ms
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 15.641/20.195/26.008/4.633 ms
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐