第三天调试USB-WiFi,平台还是全志A40i,Linux内核:3.10.65
网上买了一个芯片型号写着RTL8188EU的USB-WiFi,但买回来,发现USB-ID号不是0x0bda 0x8179
,而是0x0bda 0xf179
,把网卡插到Windows系统一看,型号是RTL8188FTV,又闹了乌龙。。
在A40i的Linux内核驱动中(Linux3.10),只有一个RTL8189F的驱动,还是SDIO接口,就算在Makefile中将接口改成USB,也会编译失败。
无奈之下,只能到网上下载驱动了,我找的驱动:rtl8188FU_linux_v5.3.0.1
文章目录
驱动安装WiFi测试驱动安装
原驱动不能直接编译,还需要做一些小修改:
修改Makefile文件
首先确认芯片型号和接口选择
平台选择上取消I386_PC,选择SUN50IW1P1(没有SUN8I,选择SUN8I_W3P1我没编译成功)
搜索CONFIG_PLATFORM_ARM_SUN50IW1P1
,找到该平台对应的配置项,修改ARCH
,CROSS_COMPILE
,KSRC
,KVER
几个与编译环境有关的配置(根据自己编译器和内核的路径修改):
make
修改完Makefile文件后,到驱动根目录使用make命令进行编译。
这个错误是我个人问题,驱动的目录不能包含中文字符(“(”
也不行)
删掉目录的括号和中文字符后,再次编译,遇到mach/sys_config.h
头文件未找到,
还好这个问题我遇到过,打开报错的文件驱动目录/platform/platform_ARM_SUNxI_usb.c
,修改头文件如下:
再编译,又遇到了第一天的问题,is_zero_mac_addr
等3个函数重复定义,
将驱动目录/include/ieee80211.h
进行以下修改(删除__inline
前面的extern),这个错误可能和编译器版本有关,或者少装了什么东西:
终于,成功了!
3. 最后,将驱动目录下生成的8188fu.ko
文件拷贝到开发板即可。
WiFi测试
接下来进行简单的测试,看看无线网卡能否正常运行。
安装驱动
使用insmod 8188fu.ko
安装驱动,dmesg
查看打印信息(如果loglevel较低),我的驱动安装log如下:
[ 3840.859997] RTW: module init start[ 3840.860066] RTW: rtl8188fu v5.3.0.1_28034.0525[ 3840.860073] RTW: build time: Nov 2 18:37:01[ 3840.860232] RTW: rtw_inetaddr_notifier_register[ 3840.860396] RTW:[ 3840.860396] usb_endpoint_descriptor(0):[ 3840.860404] RTW: bLength=7[ 3840.860409] RTW: bDescriptorType=5[ 3840.860414] RTW: bEndpointAddress=81[ 3840.860419] RTW: wMaxPacketSize=512[ 3840.860424] RTW: bInterval=0[ 3840.860430] RTW: RT_usb_endpoint_is_bulk_in = 1[ 3840.860435] RTW:[ 3840.860435] usb_endpoint_descriptor(1):[ 3840.860442] RTW: bLength=7[ 3840.860447] RTW: bDescriptorType=5[ 3840.860451] RTW: bEndpointAddress=2[ 3840.860456] RTW: wMaxPacketSize=512[ 3840.860461] RTW: bInterval=0[ 3840.860467] RTW: RT_usb_endpoint_is_bulk_out = 2[ 3840.860472] RTW:[ 3840.860472] usb_endpoint_descriptor(2):[ 3840.860478] RTW: bLength=7[ 3840.860483] RTW: bDescriptorType=5[ 3840.860488] RTW: bEndpointAddress=3[ 3840.860493] RTW: wMaxPacketSize=512[ 3840.860498] RTW: bInterval=0[ 3840.860502] RTW: RT_usb_endpoint_is_bulk_out = 3[ 3840.860509] RTW: nr_endpoint=3, in_num=1, out_num=2[ 3840.860509][ 3840.860516] RTW: USB_SPEED_HIGH[ 3840.860527] RTW: CHIP TYPE: RTL8188FU[ 3840.861013] RTW: rtw_hal_config_rftype RF_Type is 0 TotalTxPath is 1[ 3840.861035] RTW: Chip Version Info: CHIP_8188F_Normal_Chip_SMIC_B_CUT_1T1R_RomVer(0)[ 3840.861046] RTW: _ConfigChipOutEP_8188F OutEpQueueSel(0x05), OutEpNumber(2)[ 3840.861441] RTW: EEPROM type is E-FUSE[ 3840.862171] RTW: Boot from EFUSE, Autoload OK ![ 3840.862916] RTW: hal_EfuseSwitchToBank: Efuse switch bank to 0[ 3841.081549] RTW: hal_ReadEFuse_WiFi: data end at address=0x74[ 3841.081826] RTW: HW EFUSE[ 3841.081854] RTW: 0x000: 29 81 00 FC 0B 00 00 00 00 0C 04 4C 10 07 00 00[ 3841.081893] RTW: 0x010: 28 28 29 29 29 29 2B 2B 2C 2D 2D 03 FF FF FF FF[ 3841.081932] RTW: 0x020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.081971] RTW: 0x030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.08] RTW: 0x040: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082049] RTW: 0x050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082088] RTW: 0x060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082127] RTW: 0x070: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082166] RTW: 0x080: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082204] RTW: 0x090: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082243] RTW: 0x0A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082282] RTW: 0x0B0: FF FF FF FF FF FF FF FF 20 30 1B 00 00 00 00 FF[ 3841.082321] RTW: 0x0C0: FF 12 00 10 00 FF 00 FF 00 00 FF FF FF FF FF FF[ 3841.082359] RTW: 0x0D0: DA 0B 79 F1 42 66 40 04 0C 73 20 6D 28 09 03 52[ 3841.082397] RTW: 0x0E0: 65 61 6C 74 65 6B 09 03 38 30 32 2E 31 31 6E 00[ 3841.082436] RTW: 0x0F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082475] RTW: 0x100: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082514] RTW: 0x110: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082553] RTW: 0x120: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082592] RTW: 0x130: C1 B6 FF FF FF FF FF FF FF FF 00 11 FF FF FF FF[ 3841.082631] RTW: 0x140: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082670] RTW: 0x150: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082709] RTW: 0x160: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082748] RTW: 0x170: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082787] RTW: 0x180: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082826] RTW: 0x190: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082865] RTW: 0x1A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082904] RTW: 0x1B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082943] RTW: 0x1C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.082982] RTW: 0x1D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.083021] RTW: 0x1E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.083060] RTW: 0x1F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF[ 3841.083103] RTW: EEPROM VID = 0x bda[ 3841.083110] RTW: EEPROM PID = 0xf179[ 3841.083137] RTW: hal_com_config_channel_plan chplan:0x20[ 3841.083146] RTW: Hal_EfuseParsePowerSavingMode_8188F...bHWPwrPindetect(0)-bHWPowerdown(0) ,bSupportRemoteWakeup(1)[ 3841.083152] RTW: ### PS params=> power_mgnt(2),usbss_enable(0) ###[ 3841.087669] RTW: kfree Pwr Trim flag:1[ 3841.087685] RTW: bb_gain:5[ 3841.095526] RTW: rtl8188f_FirmwareDownload fw: FW_NIC, size: 20288[ 3841.095548] RTW: rtl8188f_FirmwareDownload: fw_ver=d fw_subver=0000 sig=0x88f1, Month=02, Date=06, Hour=16, Minute=59[ 3841.095555] RTW: rtl8188f_FirmwareDownload(): Shift for fw header![ 3841.095561] RTW: rtl8188f_FirmwareDownload by IO write![ 3841.180007] RTW: polling_fwdl_chksum: Checksum report OK! (1, 0ms), REG_MCUFWDL:0x00040105[ 3841.184022] RTW: _8051Reset8188: Finish[ 3841.197599] RTW: _FWFreeToGo: Polling FW ready OK! (39, 10ms), REG_MCUFWDL:0x000401c6[ 3841.197617] RTW: rtl8188f_FirmwareDownload: DLFW OK ![ 3841.197625] RTW: rtl8188f_FirmwareDownload success. write_fw:1, 100ms[ 3841.198040] RTW: <=== rtl8188f_FirmwareDownload()[ 3841.202876] RTW: CardDisableRTL8188FU[ 3841.215505] RTW: hal_read_mac_hidden_rpt OK! (1, 20ms), fwdl:1, id:0x19[ 3841.215524] RTW: InitAdapterVariablesByPROM_8188FU(): REPLACEMENT = 0[ 3841.215531] RTW: rtw_hal_read_chip_info in 350 ms[ 3841.215593] RTW: init_channel_set((null)) ChannelPlan ID:0x20, ch num:13[ 3841.246315] RTW: NR_RECVBUFF: 8[ 3841.246332] RTW: MAX_RECVBUF_SZ: 32768[ 3841.246365] RTW: NR_PREALLOC_RECV_SKB: 8[ 3841.250318] RTW: rtw_alloc_macid((null)) if1, mac_addr:ff:ff:ff:ff:ff:ff macid:1[ 3841.251274] RTW: IQK FW offload:disable[ 3841.251303] RTW: Init_ODM_ComInfo_8188f(): fab_ver=0 cut_ver=12[ 3841.251317] RTW: rtw_regsty_chk_target_tx_power_valid return _FALSE for band:0, path:0, rs:0, t:-1[ 3841.251425] RTW: phy_ConfigBBWithPgParaFile(): No File PHY_REG_PG.txt, Load from HWImg Array![ 3841.251445] RTW: default power by rate loaded[ 3841.251643] RTW: pwrctrlpriv.bSupportRemoteWakeup~~~~~~[ 3841.251663] RTW: pwrctrlpriv.bSupportRemoteWakeup~~~[1]~~~[ 3841.251673] RTW: can't get autopm:[ 3841.251686] RTW: rtw_macaddr_cfg mac addr:04:0c:73:20:6d:28[ 3841.251695] RTW: bDriverStopped:True, bSurpriseRemoved:False, bup:0, hw_init_completed:0[ 3841.278647] RTW: NR_RECVBUFF: 8[ 3841.278663] RTW: MAX_RECVBUF_SZ: 32768[ 3841.278688] RTW: NR_PREALLOC_RECV_SKB: 8[ 3841.282590] RTW: rtw_alloc_macid((null)) if2, mac_addr:ff:ff:ff:ff:ff:ff macid:1[ 3841.282621] RTW: rtw_drv_add_vir_if if2 mac_addr : 06:0c:73:20:6d:28[ 3841.282755] RTW: rtw_wiphy_alloc(phy0)[ 3841.282765] RTW: rtw_wdev_alloc(padapter=eb8d4000)[ 3841.282843] RTW: rtw_wiphy_alloc(phy1)[ 3841.282849] RTW: rtw_wdev_alloc(padapter=eb946000)[ 3841.282863] RTW: rtw_wiphy_register(phy0)[ 3841.284386] RTW: rtw_ndev_init(wlan0) if1 mac_addr=04:0c:73:20:6d:28[ 3841.285812] RTW: rtw_ndev_notifier_call(wlan0) state:16[ 3841.300182] RTW: rtw_ndev_notifier_call(wlan0) state:5[ 3841.300277] RTW: rtw_wiphy_register(phy1)[ 3841.304877] RTW: rtw_ndev_init(wlan1) if2 mac_addr=06:0c:73:20:6d:28[ 3841.306241] RTW: rtw_ndev_notifier_call(wlan1) state:16[ 3841.319641] RTW: rtw_ndev_notifier_call(wlan1) state:5[ 3841.323722] usbcore: registered new interface driver rtl8188fu[ 3841.323740] RTW: module init ret=0
rtl8188F的打印信息比rtl8188EU和rtl8192CU的多,不知道是不是DEBUG等级设置不同导致的。
驱动安装log中,提示我wlan0
和wlan1
设备生成成功(不知道为什么有两个,但mac地址相同,所以其实就是同一个设备)
设置WiFi名称和密码
先用iw
命令进行扫描,看看网卡能搜索到的WiFi名
iw dev wlan0 scan | grep SSID
如果SSID(WiFi名)为空
或\xe7...
这类奇怪字符,说明无法连接该WiFi。
配置/etc/wpa_supplicant.conf
文件,ssid
表示WiFi名,psk
为密码,
设置网卡为STA模式(连接其他WiFi)
使用
wpa_supplicant -i wlan0 -Dnl80211 -c /etc/wpa_supplicant.conf -B
命令将wlan0设置成STA模式,用来连接配置里的WiFi。
使用
wpa_cli -i wlan0 status
命令查看wlan0
状态:
或使用
iw dev wlan0 link
现在只是连接上了WiFi,但没有分配IP地址, 还不能上网,使用
udhcpc -i wlan0 &
进行动态分配IP地址:
再次查看wlan0的连接状态,多了一项address
(IP地址)
此时网卡已经可以上网了:
网速测试
测试网速需要用到iperf3
工具
首先在一台联网的电脑上使用iperf3 -s
,将其作为服务端。(连接同一WiFi的电脑应该也可以用来当服务器,我这里用的是云服务器,相当于一台独立IP的外网电脑)
然后在开发板命令行使用iperf3 -c 服务端IP
测试客户端的上传速率:约为4M/s。
客户端(开发板)使用iperf3 -c 服务端IP -R
用来测试客户端下载速率,测得不到2M/s。