硬件平台
芯片:AM335X
内核版本:Linux/arm 3.14.26
移植步骤
1. 修改内核配置
添加IEEE 802.11协议
[*] Networking support --->
-*- Wireless --->
--- Wireless
<*> cfg80211 - wireless configuration API
[*] enable powersave by default
[*] cfg80211 wireless extensions compatibility
<*> Generic IEEE 802.11 Networking Stack (mac80211)
[*] Minstrel
[*] Minstrel 802.11n support
添加Host AP
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
2. 编译驱动文件
编译驱动文件,以内核模块方式加载。
驱动源码下载:[RTL8188EUS_linux_v4.3.0.7_12758.20141114.zip]
链接:https://pan.baidu.com/s/1uJDGOOCxiQ8sBTM6oHXp7Q
提取码:3wkd
解压缩RTL8188EUS_linux_v4.3.0.7_12758.20141114.zip
,进入RTL8188EUS_linux_v4.3.0.7_12758.20141114/driver/
文件夹,解压缩rtl8188EUS_linux_v4.3.0.7_12758.20141114.tar.gz
到当前文件夹,修改Makefile
文件。
CONFIG_PLATFORM_I386_PC = n //屏蔽默认选项
...
CONFIG_PLATFORM_ARM_AM335X = y //新增此定义
ifeq ($(CONFIG_PLATFORM_ARM_AM335X), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := /home/mq/project/Dasheng_AM335X/am335x/tools/x86-linux-gnu/bin/arm-linux-gnueabihf- //交叉编译器路径
KVER := 3.14.26 //内核版本
KSRC := /home/mq/project/Dasheng_AM335X/am335x/src/am335x-linux-3.14.26/ //内核文件路径
endif
修改完以上内容,直接编译
make
拷贝生成的8188eu.ko
驱动模块到板子上
参考:《Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf》
3. 驱动模块安装
拷贝到板子之后
root@am335x-evm:~/modules# ls
8188eu.ko
安装内核模块
root@am335x-evm:~/modules# insmod 8188eu.ko
[ 2432.905038] RTL871X: module init start
[ 2432.909282] RTL871X: rtl8188eu v4.3.0.7_12758.20141114
[ 2432.914775] RTL871X: build time: Mar 11 2019 15:00:26
[ 2432.922312] RTL871X:
[ 2432.922312] usb_endpoint_descriptor(0):
[ 2432.928953] RTL871X: bLength=7
[ 2432.932166] RTL871X: bDescriptorType=5
[ 2432.936158] RTL871X: bEndpointAddress=81
[ 2432.940278] RTL871X: wMaxPacketSize=512
[ 2432.944330] RTL871X: bInterval=0
[ 2432.947721] RTL871X: RT_usb_endpoint_is_bulk_in = 1
[ 2432.952841] RTL871X:
[ 2432.952841] usb_endpoint_descriptor(1):
[ 2432.959271] RTL871X: bLength=7
[ 2432.962479] RTL871X: bDescriptorType=5
[ 2432.966436] RTL871X: bEndpointAddress=2
[ 2432.970462] RTL871X: wMaxPacketSize=512
[ 2432.974508] RTL871X: bInterval=0
[ 2432.977898] RTL871X: RT_usb_endpoint_is_bulk_out = 2
[ 2432.983106] RTL871X:
[ 2432.983106] usb_endpoint_descriptor(2):
[ 2432.989528] RTL871X: bLength=7
[ 2432.992735] RTL871X: bDescriptorType=5
[ 2432.996692] RTL871X: bEndpointAddress=3
[ 2433.000718] RTL871X: wMaxPacketSize=512
[ 2433.004800] RTL871X: bInterval=0
[ 2433.008189] RTL871X: RT_usb_endpoint_is_bulk_out = 3
[ 2433.013428] RTL871X: nr_endpoint=3, in_num=1, out_num=2
[ 2433.013428]
[ 2433.020468] RTL871X: USB_SPEED_HIGH
[ 2433.026482] RTL871X: CHIP TYPE: RTL8188E
[ 2433.030694] RTL871X: register rtw_netdev_ops to netdev_ops
[ 2433.037296] RTL871X: Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_A_CUT_1T1R_RomVer(0)
[ 2433.046027] RTL871X: RF_Type is 3!!
[ 2433.049709] RTL871X: _ConfigNormalChipOutEP_8188E OutEpQueueSel(0x05), OutEpNumber(2)
[ 2433.058390] RTL871X: EEPROM type is E-FUSE
[ 2433.062829] RTL871X: ====> _ReadAdapterInfo8188EU
[ 2433.068148] RTL871X: Boot from EFUSE, Autoload OK !
[ 2433.079178] RTL871X: SetHwReg8188EU: bMacPwrCtrlOn=1
[ 2433.089888] bFWReady == _FALSE call reset 8051...
[ 2433.095716] RTL871X: =====> _8051Reset88E(): 8051 reset success .
[ 2433.115742] RTL871X: efuse_read_phymap_from_txpktbuf bcnhead:0
[ 2433.122391] RTL871X: efuse_read_phymap_from_txpktbuf len:118, lenbak:118, aaa:118, aaabak:118
[ 2433.136235] RTL871X: efuse_read_phymap_from_txpktbuf read count:116
[ 2433.143102] RTL871X: EEPROM ID=0x8129
[ 2433.147000] RTL871X: VID = 0x0BDA, PID = 0x8179
[ 2433.151761] RTL871X: Customer ID: 0x00, SubCustomer ID: 0xCD
[ 2433.157738] RTL871X: Hal_ReadPowerSavingMode88E...bHWPwrPindetect(0)-bHWPowerdown(0) ,bSupportRemoteWakeup(1)
[ 2433.168169] RTL871X: ### PS params=> power_mgnt(1),usbss_enable(0) ###
[ 2433.175141] RTL871X: ======= Path 0, Channel 1 =======
[ 2433.180538] RTL871X: Index24G_CCK_Base[0][1] = 0x25
[ 2433.185684] RTL871X: Index24G_BW40_Base[0][1] = 0x2b
[ 2433.190895] RTL871X: ======= Path 0, Channel 2 =======
[ 2433.196313] RTL871X: Index24G_CCK_Base[0][2] = 0x25
[ 2433.201435] RTL871X: Index24G_BW40_Base[0][2] = 0x2b
[ 2433.206669] RTL871X: ======= Path 0, Channel 3 =======
[ 2433.212064] RTL871X: Index24G_CCK_Base[0][3] = 0x25
[ 2433.217207] RTL871X: Index24G_BW40_Base[0][3] = 0x2b
[ 2433.222419] RTL871X: ======= Path 0, Channel 4 =======
[ 2433.227836] RTL871X: Index24G_CCK_Base[0][4] = 0x25
[ 2433.232957] RTL871X: Index24G_BW40_Base[0][4] = 0x2b
[ 2433.238195] RTL871X: ======= Path 0, Channel 5 =======
[ 2433.243613] RTL871X: Index24G_CCK_Base[0][5] = 0x25
[ 2433.248735] RTL871X: Index24G_BW40_Base[0][5] = 0x2b
[ 2433.253969] RTL871X: ======= Path 0, Channel 6 =======
[ 2433.259365] RTL871X: Index24G_CCK_Base[0][6] = 0x25
[ 2433.264509] RTL871X: Index24G_BW40_Base[0][6] = 0x2b
[ 2433.269721] RTL871X: ======= Path 0, Channel 7 =======
[ 2433.275138] RTL871X: Index24G_CCK_Base[0][7] = 0x25
[ 2433.280260] RTL871X: Index24G_BW40_Base[0][7] = 0x2b
[ 2433.285493] RTL871X: ======= Path 0, Channel 8 =======
[ 2433.290888] RTL871X: Index24G_CCK_Base[0][8] = 0x25
[ 2433.296048] RTL871X: Index24G_BW40_Base[0][8] = 0x2b
[ 2433.301261] RTL871X: ======= Path 0, Channel 9 =======
[ 2433.306681] RTL871X: Index24G_CCK_Base[0][9] = 0x24
[ 2433.311804] RTL871X: Index24G_BW40_Base[0][9] = 0x2a
[ 2433.317039] RTL871X: ======= Path 0, Channel 10 =======
[ 2433.322526] RTL871X: Index24G_CCK_Base[0][10] = 0x24
[ 2433.327765] RTL871X: Index24G_BW40_Base[0][10] = 0x2a
[ 2433.333069] RTL871X: ======= Path 0, Channel 11 =======
[ 2433.338578] RTL871X: Index24G_CCK_Base[0][11] = 0x24
[ 2433.343811] RTL871X: Index24G_BW40_Base[0][11] = 0x2a
[ 2433.349115] RTL871X: ======= Path 0, Channel 12 =======
[ 2433.354623] RTL871X: Index24G_CCK_Base[0][12] = 0x22
[ 2433.359836] RTL871X: Index24G_BW40_Base[0][12] = 0x28
[ 2433.365163] RTL871X: ======= Path 0, Channel 13 =======
[ 2433.370649] RTL871X: Index24G_CCK_Base[0][13] = 0x22
[ 2433.375884] RTL871X: Index24G_BW40_Base[0][13] = 0x28
[ 2433.381188] RTL871X: ======= Path 0, Channel 14 =======
[ 2433.386696] RTL871X: Index24G_CCK_Base[0][14] = 0x22
[ 2433.391909] RTL871X: Index24G_BW40_Base[0][14] = 0x28
[ 2433.397237] RTL871X: ======= TxCount 0 =======
[ 2433.401904] RTL871X: CCK_24G_Diff[0][0]= 0
[ 2433.406227] RTL871X: OFDM_24G_Diff[0][0]= 2
[ 2433.410622] RTL871X: BW20_24G_Diff[0][0]= 0
[ 2433.415035] RTL871X: BW40_24G_Diff[0][0]= 0
[ 2433.419425] RTL871X: EEPROMRegulatory = 0x0
[ 2433.423844] RTL871X: mlmepriv.ChannelPlan = 0x20
[ 2433.428692] RTL871X: CrystalCap: 0x20
[ 2433.432536] RTL871X: EEPROM Customer ID: 0x 0
[ 2433.437137] RTL871X: EEPROM : AntDivCfg = 0, TRxAntDivType = 3
[ 2433.443279] RTL871X: Board Type: 0x 0
[ 2433.447124] RTL871X: ThermalMeter = 0x18
[ 2433.451244] RTL871X: <==== _ReadAdapterInfo8188EU in 390 ms
[ 2433.499563] RTL871X: init_channel_set ChannelPlan ID 20 Chan num:13
[ 2433.507932] RTL871X: pwrctrlpriv.bSupportRemoteWakeup~~~~~~
[ 2433.513843] RTL871X: pwrctrlpriv.bSupportRemoteWakeup~~~[1]~~~
[ 2433.519976] RTL871X: can't get autopm:
[ 2433.524047] RTL871X: rtw_macaddr_cfg MAC Address = 00:11:7f:45:10:61
[ 2433.530815] RTL871X: bDriverStopped:1, bSurpriseRemoved:0, bup:0, hw_init_completed:0
[ 2433.595038] RTL871X: rtw_ndev_init(wlan0)
[ 2433.608842] RTL871X: _rtw_drv_register_netdev, MAC Address (if1) = 00:11:7f:45:10:61
[ 2433.625581] usbcore: registered new interface driver rtl8188eu
[ 2433.631752] RTL871X: module init ret=0
检查模块是否安装成功
root@am335x-evm:~/modules# ifconfig wlan0 up
[ 2505.334091] RTL871X: +871x_drv - drv_open, bup=0
[ 2505.338993] RTL871X: Set RF Chip ID to RF_6052 and RF type to 1T1R.
[ 2505.347242] RTL871X: rtl8188e_FirmwareDownload fw:NIC, size: 13904
[ 2505.354022] RTL871X: rtl8188e_FirmwareDownload: fw_ver=b fw_subver=0001 sig=0x88e1, Month=11, Date=27, Hour=30, Minute=36
[ 2505.381116] RTL871X: polling_fwdl_chksum: Checksum report OK! (1, 0ms), REG_MCUFWDL:0x00030005
[ 2505.391338] RTL871X: =====> _8051Reset88E(): 8051 reset success .
[ 2505.398168] RTL871X: _FWFreeToGo: Polling FW ready OK! (1, 10ms), REG_MCUFWDL:0x000300c6
[ 2505.406715] RTL871X: FWDL success. write_fw:1, 40ms
[ 2505.683516] ==> rtl8188e_iol_efuse_patch
[ 2505.733796] RTL871X: pDM_Odm TxPowerTrackControl = 1
[ 2505.918341] RTL871X: rtl8188eu_hal_init in 580ms
[ 2505.923964] RTL871X: hw_var_set_opmode()-2938 mode = 2
[ 2505.931653] RTL871X: MAC Address = 00:11:7f:45:10:61
[ 2505.937513] RTL871X: -871x_drv - drv_open, bup=1
root@am335x-evm:~/modules# [ 2507.936714] RTL871X: ==>rtw_ps_processor .fw_state(8)
[ 2507.942051] RTL871X: ==>ips_enter cnts:1
[ 2507.946230] RTL871X: nolinked power save enter
[ 2507.950898] RTL871X: ===> rtw_ips_pwr_down...................
[ 2507.956963] RTL871X: ====> rtw_ips_dev_unload...
[ 2507.979046] RTL871X: usb_read_port_cancel
[ 2507.983993] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2507.993860] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2508.003732] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2508.013573] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2508.023176] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2508.032974] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2508.043078] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2508.052943] RTL871X: usb_read_port_complete() RX Warning! bDriverStopped(0) OR bSurpriseRemoved(0)
[ 2508.062645] RTL871X: usb_write_port_cancel
[ 2508.067534] RTL871X: ==> rtl8188eu_hal_deinit
[ 2508.072411] RTL871X: bkeepfwalive(0)
[ 2508.079923] RTL871X: SetHwReg8188EU: bMacPwrCtrlOn=0
[ 2508.085191] RTL871X: <=== rtw_ips_pwr_down..................... in 140ms
查看网口信息,多出wlan0
网卡
root@am335x-evm:~/modules# ifconfig
eth0 Link encap:Ethernet HWaddr E4:39:80:16:F5:C4
inet addr:192.168.2.125 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16901 errors:0 dropped:6 overruns:0 frame:0
TX packets:8824 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11790505 (11.2 MiB) TX bytes:1371622 (1.3 MiB)
Interrupt:56
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:700 (700.0 B) TX bytes:700 (700.0 B)
wlan0 Link encap:Ethernet HWaddr 00:11:7F:45:10:61
UP 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)
4. AP模式
为了让板子上的RTL8188模块,发出WIFI信号,其他设备可以连接进来,即把RTL8188当作WIFI热点来使用,需要借助hostapd来实现。
解压缩wpa_supplicant_hostapd.zip
,进入wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd/
文件夹下,修改Makefile
并编译源码
//在ifndef CC之前定义CC编译器
CC=/home/mq/project/Dasheng_AM335X/am335x/tools/x86-linux-gnu/bin/arm-linux-gnueabihf-gcc
ifndef CC
CC=gcc
endif
执行make
编译hostapd
。
拷贝wpa_supplicant_hostapd/
文件夹下的rtl_hostapd_2G.conf
到板子的/etc/
目录下。
root@am335x-evm:~# hostapd -d /etc/rtl_hostapd_2G.conf -B
启动hostapd
,并置于后台运行。以下为hostapd
启动日志。
random: Trying to read entropy from /dev/random
Configuration file: /etc/rtl_hostapd_2G.conf
[ 9411.227675] RTL871X: +871x_drv - drv_open, bup=1
[ 9411.232722] RTL871X: -871x_drv - drv_open, bup=1
drv->ifindex=3
l2_sock_recv==l2_sock_xmit=0x0x52638[ 9411.240963] RTL871X: _rtw_pwr_wakeup call ips_leave....
[ 9411.249605] RTL871X: ==>ips_leave cnts:7
[ 9411.253794] RTL871X: ===> rtw_ips_pwr_up..............
[ 9411.259301] RTL871X: ===> ips_netdrv_open.........
[ 9411.267714] RTL871X: SetHwReg8188EU: bMacPwrCtrlOn=1
[ 9411.273013] RTL871X: Set RF Chip ID to RF_6052 and RF type to 1T1R.
[ 9411.280412] RTL871X: rtl8188e_FirmwareDownload fw:NIC, size: 13904
[ 9411.286925] RTL871X: rtl8188e_FirmwareDownload: fw_ver=b fw_subver=0001 sig=0x88e1, Month=11, Date=27, Hour=30, Minute=36
[ 9411.314026] RTL871X: polling_fwdl_chksum: Checksum report OK! (1, 0ms), REG_MCUFWDL:0x00030005
[ 9411.324259] RTL871X: =====> _8051Reset88E(): 8051 reset success .
[ 9411.331203] RTL871X: _FWFreeToGo: Polling FW ready OK! (1, 10ms), REG_MCUFWDL:0x000300c6
[ 9411.339706] RTL871X: FWDL success. write_fw:1, 40ms
[ 9411.610304] ==> rtl8188e_iol_efuse_patch
[ 9411.653651] RTL871X: pDM_Odm TxPowerTrackControl = 1
[ 9411.834743] RTL871X: rtl8188eu_hal_init in 570ms
[ 9411.839775] RTL871X: hw_var_set_opmode()-2938 mode = 2
[ 9411.847909] RTL871X: <=== rtw_ips_pwr_up.............. in 590ms
[ 9411.854276] RTL871X: nolinked power save leave
[ 9411.859176] RTL871X: ==> ips_leave.....LED(0x00028282)...
[ 9411.864890] RTL871X: set_mode = IW_MODE_MASTER
[ 9411.870200] RTL871X: hw_var_set_opmode()-2938 mode = 3
BSS count 1, BSSID mask 00:00:00:00:00:00 (0 bit[ 9411.876348] RTL871X: rtw_hostapd_sta_flush
s)
Scan for neighboring BSSes prior to enabling 40 MHz channel
Failed to request a scan of neighboring BSSes
HT40: control channel: 6 secondary channel: 10
Completing interface initialization
Mode: IEEE 802.11g Channel: 6 Frequency: 2437 MHz
RATE[0] rate=10 flags=0x1
RATE[1] rate=20 flags=0x1
RATE[2] rate=55 flags=0x1
RATE[3] rate=110 flags=0x1
RATE[4] rate=60 flags=0x0
RATE[5] rate=90 flags=0x0
RATE[6] rate=120 flags=0x0
RATE[7] rate=180 flags=0x0
RATE[8] rate=240 flags=0x0
RATE[9] rate=360 flags=0x0
RATE[10] rate=480 flags=0x0
RATE[11] rate=540 flags=0x0
Flushing old station entries
[ 9412.061635] RTL871X: rtw_sta_flush(wlan0)
[ 9412.065871] RTL871X: issue_deauth to ff:ff:ff:ff:ff:ff
Deauthenticate all stations
+rtl871x_sta_dea[ 9412.072003] RTL871X: rtw_set_encryption
uth_ops, ff:ff:ff:ff:ff:ff is deauth, reason=2
[ 9412.079794] RTL871X: clear default encryption keys, keyid=0
rtl871x_set_key_ops
rtl871x_set_key_ops
[ 9412.126527] RTL871X: rtw_set_encryption
[ 9412.132059] RTL871X: clear default encryption keys, keyid=1
rtl871x_set_key_ops
[ 9412.138220] RTL871X: rtw_set_encryption
[ 9412.144060] RTL871X: clear default encryption keys, keyid=2
rtl871x_set_key_ops
[ 9412.253401] RTL871X: rtw_set_encryption
[ 9412.259220] RTL871X: clear default encryption keys, keyid=3
Using interface wlan0 with hwaddr 00:11:7f:45:10:61 and ssid 'rtwap'
Deriving WPA PSK based on passphrase
SSID - hexdump_ascii(len=5):
72 74 77 61 70 rtwap
PSK (ASCII passphrase) - hexdump_ascii(len=8): [REMOVED]
PSK (from passphrase) - hexdump(len=32): [REMOVE[ 9412.397508] RTL871X: rtw_set_beacon, len=149
D]
WPS: Use configured UUID - hexdump(len=16): [ 9412.405550] RTL871X: rtw_check_beacon_data, len=135
[ 9412.414878] RTL871X: [HT] Support STBC = 0x01
WPS: Build Beacon IEs
WPS: * Version (hardcod[ 9412.424120] RTL871X: update_hw_ht_param
ed 0x10)
WPS: * Wi-Fi Protected Setup State (2)
WPS: Build Probe Response IEs
WPS: * Versio[ 9412.436121] RTL871X: CH=6, BW=1, offset=1
n (hardcoded 0x10)
WPS: * Wi-Fi Protected Setu[ 9412.445057] RTL871X: HW_VAR_BASIC_RATE: 0x15f -> 0x15f -> 0x15f
p State (2)
WPS: * Response Type (3)
WPS: * [ 9412.455387] RTL871X: ### Set STA_(1) info
UUID-E
WPS: * Manufacturer
WPS: * Model Name[ 9412.463353] RTL871X: update_bmc_sta=> mac_id:1 , raid:6 , bitmap=0xf
WPS: * Model Number
WPS: * Serial Number
W[ 9412.474354] RTL871X: rtl8188e_Add_RateATid=> mac_id:1 , raid:6 , ra_bitmap=0xf, shortGIrate=0x00
PS: * Primary Device Type
[ 9412.487664] RTL871X: ### MacID(1),Set Max Tx RPT MID(2)
WPS: * Config Methods (18c)
WPS: * RF Bands [ 9412.497761] RTL871X: ### rtl8188e_set_FwMediaStatus_cmd: MStatus=1 MACID=1
(1)
rtl871x_set_beacon_ops
[ 9412.510085] RTL871X: assoc success
rtl871x_set_hidden_ssid ignore_broadcast_ssid:0,[ 9412.515547] RTL871X: rtw_set_hidden_ssid(wlan0) ignore_broadcast_ssid:0, rtwap,5
rtwap,5
rtl871x_set_acl
rtl871x_set_wps_[ 9412.527983] RTL871X: rtw_set_wps_assoc_resp, len=14
assoc_resp_ie
rtl871x_set_wps_beacon_ie[ 9412.536624] RTL871X: rtw_set_wps_beacon, len=30
rtl871x_set_wps_probe_resp_ie
[ 9412.544879] RTL871X: rtw_set_wps_probe_resp, len=136
urandom: Got 20/20 bytes from /dev/urandom
GMK - hexdump(len=32): [REMOVED]
Key Counter - hexdump(len=32): [REMOVED]
WPA: group state machi[ 9412.561890] RTL871X: rtw_set_encryption
ne entering state GTK_INIT (VLAN-ID 0)
GTK - he[ 9412.569634] RTL871X: rtw_set_encryption, set group_key, CCMP
xdump(len=16): [REMOVED]
WPA: group state machi[ 9412.579817] RTL871X: rtw_ap_set_group_key
ne entering state SETKEYSDONE (VLAN-ID 0)
rtl871x_set_key_ops
[ 9412.589581] RTL871X: set group key camid:1, addr:00:00:00:00:00:00, kid:1, type:AES
[ 9412.602743] RTL871X: SetHwReg8188EU, 3663, RCR= 7000208e
rtl871x_set_beacon_ops
[ 9412.609151] RTL871X: rtw_set_beacon, len=171
[ 9412.615687] RTL871X: rtw_check_beacon_data, len=157
[ 9412.620862] RTL871X: [HT] Support STBC = 0x01
[ 9412.625840] RTL871X: update_hw_ht_param
[ 9412.633582] RTL871X: CH=6, BW=1, offset=1
[ 9412.640338] RTL871X: HW_VAR_BASIC_RATE: 0x15f -> 0x15f -> 0x15f
[ 9412.647292] RTL871X: ### Set STA_(1) info
[ 9412.651567] RTL871X: update_bmc_sta=> mac_id:1 , raid:6 , bitmap=0xf
[ 9412.658248] RTL871X: rtl8188e_Add_RateATid=> mac_id:1 , raid:6 , ra_bitmap=0xf, shortGIrate=0x00
[ 9412.667518] RTL871X: ### MacID(1),Set Max Tx RPT MID(2)
[ 9412.673386] RTL871X: ### rtl8188e_set_FwMediaStatus_cmd: MStatus=1 MACID=1
rtl871x_set_hidden_ssid ignore_broadcast_ssid:0,[ 9412.681310] RTL871X: rtw_set_hidden_ssid(wlan0) ignore_broadcast_ssid:0, rtwap,5
rtwap,5
rtl871x_set_acl
wlan0: Setup of interface done.
通过手机或者其它WIFI设备,可以搜索到rtl8188模块发出的无线信号。WIFI名称以及密码,在rtl_hostapd_2G.conf
文件中进行配置,默认配置为:
##### hostapd configuration file ##############################################
interface=wlan0
ctrl_interface=/var/run/hostapd
ssid=rtwap
channel=6
wpa=2
wpa_passphrase=87654321
#bridge=br0
参考:《Quick_Start_Guide_for_SoftAP.pdf》
5. Station模式
Station模式下,RTL8188模块可以作为WIFI客户端,去连接其它设备的AP信号,比如连接到路由器级,实现上网功能。
解压缩wpa_supplicant_hostapd.zip
,进入wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/wpa_supplicant/
文件夹下,修改Makefile
并编译源码
CC=/home/mq/project/Dasheng_AM335X/am335x/tools/x86-linux-gnu/bin/arm-linux-gnueabihf-gcc
ifndef CC
CC=gcc
endif
执行make
编译,得到wpa_supplicant
和wpa_cli
应用程序,拷贝到板子的/usr/bin
目录下,在/etc/
目录下,创建wpa_supplicant.conf
文件,内容为
ctrl_interface=/var/run/wpa_supplicant
update_config=1
通过wpa_cli
配置目标AP的信号,即WIFI用户名和密码。
//首先启动wpa_supplicant,后台运行
root@am335x-evm:~# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant.conf -B
//扫描周边的wifi信号
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant scan
//查看扫描的结果
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant scan_results
Selected interface 'wlan0'
bssid / frequency / signal level / flags / ssid
68:db:54:30:08:ff 2412 93 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] 317
40:f4:20:bf:fa:0a 2452 80 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ChinaNet-kisW
8c:14:b4:5a:6f:10 2447 68 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ChinaNet-7ECn
d0:76:e7:2f:6b:20 2437 61 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] myy888
74:7d:24:d2:b5:dc 2422 58 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] @PHICOMM_401
50:3a:a0:48:24:1e 2412 56 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] gja2095
d0:c7:c0:e8:84:f4 2452 56 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] TP-LINK_84F4
50:bd:5f:10:e0:a4 2437 56 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]
dc:fe:18:00:1e:d7 2462 42 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] ________________________
50:bd:5f:6b:16:a6 2437 48 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] TPlink-RunOne
a4:56:02:d6:1f:45 2412 46 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] happle12345
28:f3:66:b3:a2:52 2422 46 [WPA2-PSK-CCMP][WPS][ESS] B-LINK_B3A252
fc:d7:33:c2:dd:3c 2462 44 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] 401
d4:61:2e:b8:84:80 2462 43 [WPA2-PSK-CCMP][WPS][ESS] HUAWEI-8
0c:ef:af:d0:c5:1c 2462 43 [WPA-PSK-CCMP][ESS] Widora-C51C
8c:14:b4:53:98:08 2427 46 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ChinaNet-sUXm
18:bc:5a:0b:78:90 2462 45 [WPA2-PSK-CCMP][ESS]
1e:bc:5a:0b:78:90 2462 44 [WPA2-PSK-CCMP][ESS] runone
22:bc:5a:0b:78:90 2462 43 [WPA2-PSK-CCMP][ESS] runone_guest
28:6c:07:45:78:2e 2457 42 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] QianDou Technoligy
88:44:77:a8:ec:95 2412 47 [WPA2-PSK-CCMP][ESS]
74:7d:24:ca:76:68 2437 26 [WPA2-PSK-CCMP][ESS] PD
bc:46:99:4a:8b:60 2462 26 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_201
8c:be:be:10:0e:23 2432 26 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] Xiaomi_0E22
2a:f3:66:b2:a2:52 2422 44 [ESS] __________________WiFi
2a:6c:07:44:78:2e 2457 26 [ESS]
//连接到目标AP
//查看当前连接的AP(没有连接)
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant list_network
Selected interface 'wlan0'
network id / ssid / bssid / flags
//新增网络信息
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant add_network 0
Selected interface 'wlan0'
0
//再次查看网络列表,多了id为0的网络
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant list_network
Selected interface 'wlan0'
network id / ssid / bssid / flags
0 any [DISABLED]
//设置wifi用户名,注意字符串格式
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant set_network 0 ssid '"317"'
Selected interface 'wlan0'
OK
//设置wifi密码
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant set_network 0 psk '"woyaohaohaoxuexi"'
//启动网络连接
root@am335x-evm:~# wpa_cli -p/var/run/wpa_supplicant select_network 0
//保存以上配置
root@am335x-evm:~/modules# wpa_cli -p/var/run/wpa_supplicant save_config
执行DHCP动态获取IP地址
udhcpc -i wlan0 -q
设置路由
route add default gw 192.168.2.1 dev wlan0
参考:《Quick_Start_Guide_for_Station_Mode.pdf》
6. AP + Station并发模式
为了能够让WIFI工作在AP+Station模式,RTL8188 需要配置成并发模式(concurrent mode)。具体可以参考RTL8188EUS_linux_v4.3.0.7_12758.20141114/document/
的Realtek_WiFi_concurrent_mode_Introduction.pdf
文档。
在driver/rtl8188EUS_linux_v4.3.0.7_12758.20141114/include/autoconf.h
文件中,定位到110行,取消//#define CONFIG_CONCURRENT_MODE
#define CONFIG_CONCURRENT_MODE
#ifdef CONFIG_CONCURRENT_MODE
//#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
#define CONFIG_RUNTIME_PORT_SWITCH
//#define DBG_RUNTIME_PORT_SWITCH
#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
#define CONFIG_TSF_RESET_OFFLOAD // For 2 PORT TSF SYNC.
#endif
重新编译内核模块,拷贝到板子,安装内核模块insmod 8188eu.ko
。
查看网口信息,可以看到多了wlan0
和wlan1
,说明已经安装成功。
root@am335x-evm:~/modules# ifconfig -a
eth0 Link encap:Ethernet HWaddr E4:39:80:16:F5:C4
inet addr:192.168.2.132 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:55920 errors:0 dropped:33 overruns:0 frame:0
TX packets:12445 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21227695 (20.2 MiB) TX bytes:1857228 (1.7 MiB)
Interrupt:56
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:700 (700.0 B) TX bytes:700 (700.0 B)
wlan0 Link encap:Ethernet HWaddr 00:11:7F:45:10:61
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)
wlan1 Link encap:Ethernet HWaddr 02:11:7F:45:10:61
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)
参考:《Realtek_WiFi_concurrent_mode_Introduction.pdf》
移植dns服务器
首先手动设置wlan0
网口的IP地址为192.168.8.1
,启动AP模式,root@am335x-evm:~/modules# hostapd /etc/rtl_hostapd_2G.conf -B
。
要让hostap模式能够自动为连接上来的用户分配IP地址,需要借助dns服务器来实现。dns服务器有很多种,这里选择dnsmasq,下载链接:dnsmasq下载链接
我这里选择的版本是:dnsmasq-2.80.tar.gz
解压缩,进入dnsmasq-2.80/
文件夹,修改Makefile文件
CC = /home/mq/project/Dasheng_AM335X/am335x/tools/x86-linux-gnu/bin/arm-linux-gnueabihf-gcc
# PREFIX = /usr/local
PREFIX = /home/mq/project/Dasheng_AM335X/wifi_rtl8188eus/dnsmasq-2.80/_install
添加CC变量,指定交叉编译器;修改make install
的安装路径为当前路径下的_install
文件夹,_install
文件夹手动创建。修改完之后,保存,然后执行编译并安装。
make;make install
安装完成之后,在dnsmasq-2.80/_install/sbin/
文件夹下,得到可执行文件dnsmasq
,拷贝到板子的/usr/sbin
目录下。
接下来是修改dnsmasq
的配置文件。
拷贝dnsmasq-2.80/dnsmasq.conf.example
到板子系统的/etc/
目录下,并改名为dnsmasq.conf
。
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
interface=wlan0 # 指定网口
# Uncomment this to enable the integrated DHCP server, you need
# to supply the range of addresses available for lease and optionally
# a lease time. If you have more than one network, you will need to
# repeat this for each network on which you want to supply DHCP
# service.
#dhcp-range=192.168.0.50,192.168.0.150,12h
dhcp-range=192.168.8.2,192.168.8.255,12h # 指定分配的IP地址范围
启动dnsmasq服务器,root@am335x-evm:~/modules# dnsmasq -C /etc/dnsmasq.conf
添加端口转发
# echo '1' > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
# iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
eth0 连接到路由器,然后,手机连接到rtl8188的AP上,即可实现手机和板子同时上网。
屏蔽调试信息
/RTL8188EUS_linux_v4.3.0.7_12758.20141114/driver/rtl8188EUS_linux_v4.3.0.7_12758.20141114/include/autoconf.h
文件的379行,屏蔽
#define CONFIG_DEBUG /* DBG_871X, etc... */
//#define CONFIG_DEBUG_RTL871X /* RT_TRACE, RT_PRINT_DATA, _func_enter_, _func_exit_ */
#define CONFIG_PROC_DEBUG
#define DBG_CONFIG_ERROR_DETECT
//#define DBG_CONFIG_ERROR_DETECT_INT
#define DBG_CONFIG_ERROR_RESET
===>
//#define CONFIG_DEBUG /* DBG_871X, etc... */
//#define CONFIG_DEBUG_RTL871X /* RT_TRACE, RT_PRINT_DATA, _func_enter_, _func_exit_ */
//#define CONFIG_PROC_DEBUG
//#define DBG_CONFIG_ERROR_DETECT
//#define DBG_CONFIG_ERROR_DETECT_INT
//#define DBG_CONFIG_ERROR_RESET
错误
- hostapd无法启动
需要修改内核配置root@am335x-evm:~# hostapd -d /etc/rtl_hostapd_2G.conf -B random: Trying to read entropy from /dev/random Configuration file: /etc/rtl_hostapd_2G.conf drv->ifindex=5 l2_sock_recv==l2_sock_xmit=0x0x52638 ioctl[SIOCSIWMODE]: Operation not supported Could not set interface to mode(3)! Could not set interface to master mode! rtl871xdrv driver initialization failed. rmdir[ctrl_interface]: No such file or directory
Device Drivers ---> [*] Network device support ---> [*] Wireless LAN ---> <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
- MASQUERADE 错误
编译root@am335x-evm:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables v1.8.2 (legacy): Couldn't load target `MASQUERADE':No such file or directory Try `iptables -h' or 'iptables --help' for more information. root@am335x-evm:~# iptables -h
iptables
时候,使用静态链接方式,不要使用动态链接方式。
./configure --host=arm-linux --enable-static --disable-shared --prefix=/home/mq/project/Dasheng_AM335X/wifi_rtl8188eus/iptables/__install/ --disable-ipv6 --disable-largefile --disable-nftables CC=/home/mq/project/Dasheng_AM335X/am335x/tools/x86-linux-gnu/bin/arm-linux-gnueabihf-gcc
make;make isntall
拷贝xtables-legacy-multi
到板上的/usr/sbin
目录下,手动创建软连接ln -s xtables-legacy-multi iptables
。