Linux下Wi-Fi的实现:wireless_tools和wpa_supplicant
平台为hi35XX,在Liunx下借助wireless_tools和wpa_supplicant(因为现在的无线wifi网络大多是wpa加密。所以需要移植wpa_supplicant工具)等工具实现wifi的过程。
一、移植wireless_tools
1. 下载并编译wireless_tools
tar zxf wireless_tools.29.tar.gz(网上下载)
cd wireless_tools.29
make
成功后会在当前目录生成iwspy,iwpriv,iwlist以及iwconfig等文件。
2. 拷贝文件
我们只需将这四个文件拷备到文件系统的sbin目录,然后将当前目录的libiw.so.29库文件拷到文件系统的lib目录,无线网络工具即安装完成。
二、加载无线网卡驱动模块
网上有很多无线驱动模块,可移植性很好。呵呵,我的是利用XX无线网卡公司提供的网卡驱动源码,修改下Makefile(1.网卡选择 2.平台 3.内核路径和工具链)以及os/linux下的config.mk(一般不需要修改),make得到的。
insmod rtutil5572sta.ko。
insmod rt5572sta.ko
insmod rtnet5572sta.ko
三、指令的使用
1. 扫描可用的无线网络
iwlistwifi-name scanning
其中wifi-name为无线网卡的名字,比如网卡eth0就是系统默认的网卡名字, wifi-name可以用ifconfig查看,一般为ra0(无线网卡),不过,需要ifconfig ra0 up。
2. 扫描网络信息
iwlistra0 scan
===>rt_ioctl_giwscan.11(11) BSS returned, data->length = 1427
ra0 Scan completed :
Cell 01 - Address:C4:CA:D9:1D:9E:A0
Protocol:802.11b/g/n
ESSID:""
Mode:Managed
Frequency:2.412 GHz(Channel 1)
Quality=7/100 Signal level=-87 dBm Noise level=-82 dBm
Encryption key:off
Bit Rates:54 Mb/s
如上:ESSID项的值即为无线网络的名字,如上的“TXJ”等。如果值为空,说明在无线路由勾选了隐藏ESSID的选项。ESSID是很关键的,如果被隐藏了,也不是不能连接,而是需要破解,用到其他的工具,非常麻烦。
3. 设置要连接的网络类型
iwprivra0 set NetworkType=Infra
4. 设置要连接的无线网络的安全模式
iwprivra0 set AuthMode=WPA2PSK
5. 设置网络加密方式:(CCMP即为AES)
iwprivra0 set EncrypType=TKIP
6. 设置连接时的密码
iwprivra0 set WPAPSK=******* //********为加密网络的密码
7. 连接该网络:有两种方式:
<1> 用iwpriv命令
iwpriv ra0 set SSID=TXJ
<2> 用iwconfig命令
iwconfigra0 essid TXJ
至此,如果密码正确,就可以连接上网络TXJ了。
8. 查看状态
iwpriv ra0 connStatus
当然,你也可以用iwconfig命令查看状态。