linux下wifi实现
平台为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命令查看状态。
四、wpa_supplicant
wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是 wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。
wpa_supplicant由网卡公司提供,呵呵,同样,网上也有很多相关资料,如下:
1.生成wpa_supplicant(网上下载,本人未试)
1.1下载并解压wpa_supplicant需要的源码
tarxvfz wpa_supplicant-0.7.2.tar.gz
tarxvfz wpa_supplicant-0.5.8.tar.gz
tarzxvf openssl-0.9.8e.tar.gz
1.2编译openssl库
将wpa_supplicant中的补丁拷贝到openssl中:
cp wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
建立openssl编译目标路径:
mkdir /usr/local/ssl
修改openssl-0.9.8e目录下的makefile文件,修改内容如下:
CC=arm-none-linux-gnueabi-gcc
AR=arm-none-linux-gnueabi-ar
RANLIB=arm-none-linux-gnueabi-ranlib
INSTALLTOP=/usr/local/ssl
OPENSSLDIR=/usr/local/ssl
然后编译openssl:
make & make install
正常编译后,在/usr/local/ssl中将会出现ssl库。
1.3编译wpa_supplicant
cd wpa_supplicant-0.5.8
cp defconfig .config
在.config中添加如下代码:
CC=arm-none-linux-gnueabi-gcc-L /usr/local/ssl/lib/
CFLAGS+= -I/usr/local/ssl/include/
LIBS+= -L/usr/local/ssl/lib/
然后编译:
make
经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。
2.把RT2870STA.dat文件复制到/etc/Wireless/RT2870STA 目录下
1.1 mkdir -p /etc/Wireless/RT2870STA //创建多层目录。
1.2 cp /mnt/rt5370/RT2870STA.dat /etc/Wireless/RT2870STA
3.首先关闭本地网卡,再启动wifi网卡
#ifconfig eth0 down (如果非同一ip段,不需要关闭)
ifconfig ra0 up
启动网卡后,会不断出现错误:BIRIdx(1): RXDMALen not multiple of 4.[43507], BulkInBufLen = 416)
修改./MODULE/include/iface/rtmp_usb.h问题就能够解决掉。
#define RXBULKAGGRE_SIZE 12 该为8
4.设置网卡参数
ifconfig ra0 192.168.2.188
#ifconfig ra0 broadcast 192.168.2.255 (广播地址,默认)
#ifconfig ra0 netmask 255.255.255.0(子网掩码,默认)
5.编写wpa_supplicant.conf配置文件
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="TXJ" //路由器名称
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021XNONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="xxxxx" //密码
}
6.启动命令
mkdir -p /var/run/wpa_supplicant
/mnt/rt5370/wpa_supplicant -Dwext-ira0 -c /etc/wpa_supplicant.conf
7.命令查看状态
/mnt/rt5370/iwpriv ra0 connStatus //iwpriv文件放在/mnt/rt5370/目录下,所以,需要这样运行指令。
成功 ra0 connStatus:Connected(AP:TXJ[E0:05:C5:CF:F0:56])
然后,就可以ping通192.168.2.1,说明连接上路由器了。那么,工作就完成了。
附:
-i<ifname>: 网络接口名称
-c<conf>:配置文件名称
-C<ctrl_intf>:控制接口名称
-D<driver>:驱动类型
-p<driver_param>:驱动参数
-b<br_ifname>:桥接口名称
linux下wifi实现相关推荐
- kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 【转】
转自:http://blog.chinaunix.net/uid-26349264-id-4455634.html 目录 kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 ...
- kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载_商洛学院司徒荆_新浪博客
kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 1.1 VMWare下的配置 1.2 VirtualBox下的配置 原文链接:http://www.xuanhun ...
- ubuntu 14.04 linux下wifi驱动安装使用的一些笔记
本文整理一下在学习wifi驱动安装过程中的一些笔记.本来想研究无线网卡驱动源码的,但水太深了,目前认知还不够,为有留待后续再说(这个"后续"一般都是无下文的伏笔). 一般地,无线网 ...
- Linux Wi-Fi连接工具,Linux下Wi-Fi配置工具2
上回说到,linux下面的Wi-Fi配置工具,说是江湖多事,风起云涌...嗯,这回是真的要动手配置了.各种麻烦啊,想死的心都有了有木有啊. 尝试用iwconfig 话说上回说用iwconfig配置Wi ...
- Linux下 WiFi rtl 移植,IMX6Q Linux WIFI+BT(RTL8723au)模块移植问题
软件环境:IMX6Q 4核,Linux 下 BSP: L3.0.35_4.1.0_130816_source 开机打印信息: U-Boot 2009.08 ( 5��月 26 2016 - 12 ...
- linux下wifi设备的实现逻辑
说起 Linux 对 WiFi 的支持和实现,给它最有力支持的莫过于 HP 公司的 Jean Tourrilhe.他为当时的Linux定义了一套无线的API,称之为 "Wireless Ex ...
- wifi linux 驱动分析,Linux 下wifi 驱动开发(二)—— WiFi模块浅析
一.什么是wifi 模块百度百科上这样定义: Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE8 ...
- Linux 下wifi 驱动开发(二)—— WiFi模块浅析
一.什么是wifi 模块 百度百科上这样定义: Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE ...
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...
最新文章
- 京东广告典型源码示例二
- Android N在通知栏上实现直接回复消息
- (原创)按照一定的格式生成一定数量的随机数的例子
- 架构师之路 — 数据库设计 — 关系型数据库的约束类型
- linux主设备编号从0到多少,Linux驱动开发之主设备号找驱动,次设备号找设备
- 树莓派进阶之路 (009) - 树莓派ftp脚本(原创)
- 薪酬管理的特点和注意事项[转]
- 【学术相关】Github大盘点!2021年最值得推荐的38篇AI论文
- 关于JavaScript 数组 的一切
- 参数注入:不使用xml,使用java配置参数的方法,以前的spring的方法
- Cannot find module 'express'
- DebugDiagx检测内存泄露
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...
- OSPF——DR及BDR详解
- 性能指标、响应时间、并发量…聊聊性能优化的衡量指标
- Spring : ImportBeanDefinitionRegistrar源码分析
- 数字人体”视觉挑战赛-宫颈癌风险智能诊断
- MySQL报错java.sql.SQLException: The server time zone value ‘乱码‘ is unrecognized or represents more tha
- 【阅读笔记】量子信息
- 命令提示符PS1的书写格式