hisi3559A的usb无线网卡驱动

hisi3559的usb无线网卡驱动(rtl8192cu)(一条龙服务:内核编译、驱动编译、iw等工具编译)

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 &