usb無線網卡驅動(rtl8192cu)
內核編譯、驅動編譯、iw等工具編譯
(哈哈,如果有其他問題,麻煩留言;)
環境
板卡:hi3559av100(arm64)
交叉編譯鏈:aarch64-himix100-linux-
usb無線網卡:rtl8192cu(ID 0bda:8178)
1、內核編譯
在內核中,不僅要包含相應無線驅動、還有包含其他一些項,否則iw等等工具無法使用;
進入內核配置:make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- menuconfig
① 搜索:rtl8192cu(注意依賴項);
② RNDIS的API驅動和gadget driver(https://blog.csdn.net/zhenglie110/article/details/80223167):
Device Drivers —>
[*] USB support —>
<*> USB Gadget Support —>
Ethernet Gadget (with CDC Ethernet support)
[*] RNDIS support
如下圖:

③ 內核關於wireless部分80211部分:cfg80211 wireless extension(https://blog.csdn.net/faihung/article/details/82497378)
Networking support ------>
Wireless----------------->
cfg80211 wireless extensions compatibility

④ 這個不太清楚是做啥的,只是看到網上寫着(https://wenku.baidu.com/view/f2d2d7ea0975f46527d3e14b.html)
Device Drivers --------->
Network device support----------- >
Wireless LAN--------------------->
IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)

2、驅動編譯
一開始在內核中沒有加③和④,以為是驅動的問題,所以找到了無線驅動源碼交叉編譯,在這個編譯過程中經歷比較痛苦,中間出了好多錯誤,但都是一開始不規范導致;除了需要驅動源代碼,還需要板卡對應內核源代碼,並且源代碼內核中一定不可以包含該驅動,否則驅動不會進行編譯;
①內核准備
.config要准備好,並且放入內核目錄下(可以看板卡對應文檔);
make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- menuconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- prepare
make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- scripts
如果不按照這三步走,在內核編譯時可能會有以下提示錯誤:
- asm/types.h不存在;
- 提示警告:Module.symvers不存在;
②驅動源代碼
makefile:
增加CONFIG_PLATFORM_HISI3559 = y,改CONFIG_PLATFORM_I386_PC = n
增加: ifeq ($(CONFIG_PLATFORM_HISI3559), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm64
CROSS_COMPILE :=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-
KVER := 4.9.37 #內核版本
KSRC ?= /home/deepglint/linux-4.9.37 #內核位置(該位置不要太過復雜,最好復制出來)
endif
編譯:make
提示錯誤:implicit declaration of function ‘csum_ipv6_magic’
處理:在提示該錯誤的文件中增加相應的頭文件,頭文件位置通過命令在內核中:find /home/deepglint/linux-4.9.37 -name "*" | xargs grep "csum_ipv6_magic" >> 1.txt,在1.txt中搜索頭文件,net/ip6_checksum.h,增加出現錯誤的完呢建在增加 include<net/ip6_checksum.h>
③加載驅動:
將生成的rtl8192cu.ko復制到板卡中,使用命令:insmod rtl8192cu.ko加載;如果出現錯誤:wiless_send_event未定義錯誤,則為內核中③沒有配置;
3、iw等工具交叉編譯
主要編譯內容包含:iw、iwlist、iwconfig、dhcpd
①dhcpd 用於無線網卡連接后分配IP;(來源:
https://www.cnblogs.com/helloworldtoyou/p/5457504.html)
- 下載:ftp://roy.marples.name/pub/dhcpcd(我下載的版本是:dhcpcd-6.9.4.tar.xz)
- 配置:./configure
- 編譯:make CC=aarch64-himix100-linux-gcc
- 生成:直接復制dhcpd即可使用(./dhcpd wlan0)
②wireless_tool(包含iwlist、iwconfig)(https://blog.csdn.net/weixin_42432281/article/details/86524808)
- 用於掃描、連接;
- 下載:https://hewlettpackard.github.io/wireless-tools/Tools.html,如下圖(或者:https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz)

- 編譯:Makefile ,修改:CC = aarch64-himix100-linux-gcc AR = aarch64-himix100-linux-ar RANLIB = aarch64-himix100-linux-ranlib
- make;
- 將生成的命令復制過去就可以直接使用;
③ iw(https://blog.csdn.net/lidroid/article/details/46725675)
需要提前安裝好libnl
libnl:
- 下載:http://www.infradead.org/~tgr/libnl/files/ 我這里選擇的是libnl-3.2.25.tar.gz
- 配置編譯:./configure --host=aarch64-himix100-linux --prefix=$PWD/tmp
make( 如果出現錯誤: sudo apt-get install bison sudo apt-get install flex)
make install
- 生成:最終文件在當前目錄下的TMP;
iw:
- 下載:https://www.kernel.org/pub/software/network/iw/(注意下載4.0版本,其他版本沒有編譯通過)
- export PKG_CONFIG_PATH=/home/deepglint/Hi3559AV100R001C02SPC010/iw/libnl-3.2.25/TMP/lib/pkgconfig:$PKG_CONFIG_PATH
- 修改:NL3xFOUND := Y
- make 便可生成iw;
openssl(https://blog.csdn.net/shunrenwang/article/details/80440647)
- 下載 https://www.openssl.org/(openssl-1.0.2h)
- ./config no-asm shared --prefix=$(pwd)/__install
- make depend
- 修改Makefile:
將下面
CC= gcc
AR= ar $(ARFLAGS) r
NM= nm
修改為
CC= aarch64-himix100-linux-gcc
AR= aarch64-himix100-linux-ar $(ARFLAGS) r
NM= aarch64-himix100-linux-nm
刪除-m64
- make clean
- make
- make install
libnl(為編譯wpa_supplicant.conf https://blog.csdn.net/shunrenwang/article/details/80439876)
- 下載: http://www.infradead.org/~tgr/libnl/(libnl-3.2.25.tar.gz )
- ./configure CC=aarch64-himix100-linux-gcc --host=aarch64-himix100-linux --enable-static --enable-shared LIBS=-lpthread --prefix=$(pwd)/__install
- make clean
- make
- make install
wpa_supplicant(https://blog.csdn.net/shunrenwang/article/details/80448959)
- 下載http://w1.fi/wpa_supplicant/(wpa_supplicant-2.5.tar.gz )
- cd wpa_supplicant-2.5/wpa_supplicant/
- cp defconfig .config
- 修改.config
將#CONFIG_LIBNL32=y
修改為
CONFIG_LIBNL32=y
- 修改Makefile
增加下面幾行(地址需要根據實際編譯的地址改變)
#openssl
CFLAGS += -I/home/deepglint/8192cu/wpa_supplication/openssl-1.0.2h/__install/include/
LIBS += -L/home/deepglint/8192cu/wpa_supplication/openssl-1.0.2h/__install/lib
LIBS_p += -L/home/deepglint/8192cu/wpa_supplication/openssl-1.0.2h/__install/lib
#libnl
CFLAGS += -I/home/deepglint/Hi3559AV100R001C02SPC010/iw/libnl-3.2.25/TMP/include/libnl3/
CFLAGS += -I/home/deepglint/Hi3559AV100R001C02SPC010/iw/libnl-3.2.25/TMP/include/
LIBS += -L/home/deepglint/Hi3559AV100R001C02SPC010/iw/libnl-3.2.25/TMP/lib/
- make clean
- make CC=aarch64-himix100-linux-gcc(有些打印 No package 'libnl-3.0' found,可以忽略)
wpa_supplicant使用配置:
設置配置文件:vi /etc/wpa_supplicant.conf
內容(ctrl_interface為文件夾,update_config表示wpa_cli可以更新該配置文件):
update_config=1
ctrl_interface=/etc/wpa_supplicant
network={
ssid="DG"
proto=WPA RSN
key_mgmt=WPA-PSK WPA-EAP
pairwise=CCMP
group=CCMP
psk="On1shiuva4"
}

運行: wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d &