RT3070无线网卡AP模式——开发板实现路由功能并使客户端成功联网
来源:互联网 发布:网络鲜花实体店 编辑:程序博客网 时间:2024/04/30 03:24
开发板:FL2440 内核:linux-3.0 无线网卡:rt3070
一、配置内核支持无线网卡softAP模式
注意:当你发现自己的menuconfig配置选项和上图中的相差十万八千里时,先把上面能够选上的和不选的都配置好,其他的需要改的选项自动就出来了!!!不要灰心,不要放弃!!
如果没有选上RF swich subsystem support选项,在使用hostapd命令时会出错
***********************************************
若出现以下错误
如图所示,修改内核后要烧进开发板更新!!而且上面图片中ssid也出错了,那是我后面设置的原因,接下去再解释
*************************************************
二、配置无线网络的软件移植
1.移植Openssl-0.9.8e
Hostapd依赖于openssl与libnl这两个库。所以首先要移植openssl与libnl,openssl我们已经移植过了, 现在移植网上普遍使用的openssl-0.9.8e
1.1下载Openssl-0.9.8e
下载地址 http://www.openssl.org/source/old/0.9.x/
或者:http://download.csdn.net/detail/u010944778/8940135
1.2解压之后修改Makefile
先建立一个install文件夹
[zzx@localhost openssl-0.9.8e]$ mkdir instll
修改Makefile
[zzx@localhost openssl-0.9.8e]$ sudo make && make install
2.移植libnl
2.1下载libnl
下载地址 http://www.openssl.org/source/old/0.9.x/ 或者http://download.csdn.net/detail/u010944778/8940293
2.2解压后创建指定安装目录
[zzx@localhost libnl-1.1]$ mkdir install2.3编译&&安装libnl
[zzx@localhost libnl-1.1]$ ./configure --prefix=/home/zzx/fl2440/3rdparty/rt3070/libnl-1.1/install --host=arm-linux[zzx@localhost libnl-1.1]$ # make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[zzx@localhost libnl-1.1]$ sudo make install
将/install下的lib文件夹中的libnl.so.1拷贝到开发板/lib目录下
****************************若出现以下错误
如图所示,指令内容中的空格错误!!!
3.移植Hostapd
3.1下载hostapd-1.0.tar.gz
下载地址:http://download.chinaunix.net/download.php?id=40061&ResourceID=4450
或者:http://download.csdn.net/detail/u010944778/8940421
3.2进入hostapd文件夹修改.config与Makefile
[zzx@localhost hostapd]$ cp defconfig .config
[zzx@localhost hostapd]$ vim .config
分别添加openssl和libnl的头文件和库路径
[zzx@localhost hostapd]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-inux-gcc[zzx@localhost hostapd]$ sudo make install
将生成可执行命令hostapd和配置文件hostapd.conf,需要tftp到自己开发板上, hostapd 给可执行权限并放到到 /bin 目录下。
注意:如果不能成功的 make ,就要仔细的查看你前面移植的libnl-1.1 和Openssl-0.9.8e 是否错误,或者是Makefile编译的路径不对。修改 hostapd.conf:
以上是自己的配置,其实是自己添加进去的,但是配置文件中是有ssid,channel等等的变量配置的,所以还需要自己在文件中找到对应处,并照着上面的改过来,否则前后变量设置不一致会产生冲突。例如:
下面是变量的解释说明
interface=wlan0 //网络接口名称
driver=nl80211 //默认使用nl80211无线驱动
ssid=My_wife //热点名称
channel=3 //设定无线频道
hw_mode=g //使用80211g协议标准
ignore_broadcast_ssid=0
auth_algs=1 //指定OSA认证算法
wpa=3 //指定WPA/WPA2类型
wpa_passphrase=12345678 //指定认证密钥
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP //启用了WPA或WPA2则需要指定wpa_pairwise或rsn_pairwise。
rsn_pairwise=CCMP
请参考如下网址信息:
http://www.linuxidc.com/Linux/2012-12/75869.htmhttp://blog.sina.com.cn/s/blog_8f5893e501016kd8.html
===================================================================
无线局域网标准IEEE(美国电机电子工程师协会) 802.11协议
*IEEE 802.11,1997年,原始标准(2Mbit/s,工作在2.4GHz)。
*IEEE 802.11a,1999年,物理层补充(54Mbit/s,工作在5GHz)。
*IEEE 802.11b,1999年,物理层补充(11Mbit/s工作在2.4GHz)。
*IEEE 802.11g,2003年,物理层补充(54Mbit/s,工作在2.4GHz)。
使用最多的应该是802.11n标准,工作在2.4GHz频段,可达600Mbps(理论值)
===================================================================
在hostapd.conf文件坐在路径执行hostapd命令>: hostapd -B hostapd.conf
成功。这时已经可以搜到我自己的My_wife了,只是还连接不上去。
***************************************
若出现以下错误
出现读取random随机数错误,可采用符号链接的方法解决:
>: mv /dev/random /dev/random.org>: ln -s /dev/urandom /dev/random
===================================================================
Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/urandom.另外一个是/dev/random。上述两种方式都可以产生随机数,dev/urandom 和dev/random都是产生用不为空的随机字符流,但区别是:/dev/random设备会封锁,直到系统产生的随机字符流已经充分够用,所以耗用时间较长。/dev/urandom设备不会封锁,数据的随机程度不高,但是一般情况已经够用。
===================================================================
更详细的文章链接:http://www.linuxidc.com/Linux/2012-05/60476.htm
网上查到是退出不正常造成的,意思是wlan0正在被使用并且不能重复的使用,可以简单粗暴地吧/var/run/hostapd文件夹给删除了,但是我自己是将hostapd -B hostapd.conf进程杀掉,然后重启网卡再执行hostapd命令,成功!!
******************************************
4.配置udhcpd
将虚拟机中/home/zzx/fl2440/3rdparty/busybox-1.20.2/examples/udhcp/udhcpd.conf文件拷贝到开发板/etc目录下然后在开发板上更改配置如下:
>: cd etc/
>: vi udhcpd.conf
>: ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 //设置你的IP地址和子网掩码
>: udhcpd -f etc/udhcpd.conf //就可以启动udhcpc服务器了
看下自己的ifconfig,我的eth0没有开机启动,是我自己的问题,所以这儿没看到有eth0
**********************************************
若出现以下错误
>: udhcpd -f /etc/udhcpd.conf
udhcpd (v1.20.2) started
udhcpd: max_leases=235 is too big, setting to 155
udhcpd: can't open '/var/lib/misc/udhcpd.leases': No such file or directory
解决:
Udhcpd在执行的时候可能会提示没有一个叫做udhcpd.release的租赁文件,这个只要在相应的文件夹下创建即可。执行下面两条命令:
>: mkdir -p /var/lib/misc/
>: touch /var/lib/misc/udhcpd.leases
5.iptables移植
===================================================================
iptables简介
iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。
Filter表负责过滤数据包,包括的规则链有,input,output和forward;
Nat表则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
Mangle表则主要应用在修改数据包内容上,用来做流量整形的。
默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;
INPUT匹配目的IP是本机的数据包,FORWARD匹配流经本机的数据包,PREROUTING用来修改目的地址用来做DNAT,POSTROUTING用来修改源地址用来做SNAT。
===================================================================
5.1下载
iptables-1.4.12.tar.gz
下载地址:http://download.csdn.net/detail/u010944778/8945513
或者:http://www.netfilter.org/projects/iptables/downloads.html5.2解压之后进入目录
[zzx@localhost iptables-1.4.12]$ mkdir install[zzx@localhost iptables-1.4.12]$ ./configure --host=arm-linux --enable-static --disable-shared --prefix=/home/zzx/fl2440/3rdparty/rt3070/iptables-1.4.12/install --disable-ipv6 --disable-largefile
[zzx@localhost iptables-1.4.12]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc CFALGS=--static LDFLAGS=-static
[zzx@localhost iptables-1.4.12]$ cd install sbin
[zzx@localhost install]$ sudo /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip xtables-multi //strip减轻大小
iptables: symbolic link to `xtables-multi'
iptables-restore: symbolic link to `xtables-multi'
iptables-save: symbolic link to `xtables-multi'
xtables-multi: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
===================================================================
再理解一次CFLAGS和LDFLAGS:一般我们通过CFLAGS的-I选项告诉编译器所依赖的第三方的库的头文件在哪里,通过LDFLAGS的-L选项告诉链接器这些库的库文件在哪里;还有LIBS是告诉链接器要链接哪些库文件。简单地说,LDFLAGS是告诉链接器从哪里寻找库文件,而LIBS是告诉链接器要链接哪些库文件。有时候LIBS指定了却找不到库时可以试试LDFLAGS。
===================================================================
此时将/install/lib文件夹和xtables-multi打包放到开发板/lib和/bin目录 下,赋予权限后将xtables-multi改名为iptables
有了iptables命令工具之后我们便要来配置nat转发表,如下:
/*将局域网内地址通过eth0接口伪装后转发出去*/>:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/*开启转发功能,允许已建立连接及相关连接对内转发*/
>: iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT
/*对外转发,数据包从wlan0流向eth0*/
>: iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
>:echo "1" >/proc/sys/net/ipv4/ip_forward
===================================================================
关于iptables的nat参考:
MASQUERADE是SNAT网络地址转换的一种,SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址,但是,对于SNAT,不管是几个地址,必须明确的指定destination的ip.如果eth0是动态拨号获取IP,那就需要MASQUERADE来实现SNAT。而我的eth0是接到路由器VAN上的,虽然路由器是拨号上网,但是我的eth0是自己指定的IP,每次都不会变,所以应该也可以使用SNAT的方式来配置iptables。
===================================================================
iptables详解参考文档:
http://soft.zdnet.com.cn/techupdate/2008/0317/772069.shtml
http://www.cnblogs.com/argb/p/3535179.html
http://blog.chinaunix.net/uid-26495963-id-3279216.html
总结:首先把你的网线连接开发板和路由器;启动网卡ifconfig wlan0 up,手动设置ifconfig wlan0的ip和netmask(我自己的是ifconfig wlan0 192.168.2.1 netmask 255.255.255.0);在hostapd.conf文件所在目录下执行命令hostapd -B hostapd.conf,这时可以成功搜索到自己开发板的wifi了,只是连接不上;执行指令udhcpd -f etc/udhcpd.conf,成功后,手机就可以连上开发板wifi,并且可以ping通手机(这是手机的ip地址应该是分配出来的网络ip的第一个,例如我的就是192.168.2.20);执行上面的iptables那四个命令,再设置eth0的ip(ifconfig eth0 192.168.199.22,注意设置eth0的ip地址应该和连接的路由器ip地址在同一网段!!!这个很重要,关系到能否上外网),接着设置网关route add default gw 192.168.199.1,执行指令udhapd -f etc/udhapd.conf,手机连上wifi后就可以直接上网啦!!!
至此使用hostapd+udhcpd+iptables等工具基于内核mac80211驱动框架就实现了RT3070无线网卡的softAP!!!
- RT3070无线网卡AP模式——开发板实现路由功能并使客户端成功联网
- RT3070无线网卡AP模式——开发板实现路由功能并使客户端成功联网
- RT3070无线网卡AP模式——开发板实现路由功能
- RT3070 STA模式——开发板实现上网功能
- arm9+linux fl2440 实现RT3070无线网卡AP模式并使开发板接入Wifi上网
- RT3070无线网卡AP模式
- fl2440-RT3070无线网卡(AP模式)实现路由器功能
- rt3070无线网卡工作在AP模式----fl2440开发板
- RT3070无线网卡Sta模式和Ap模式的使用
- Rt3070无线网卡AP功能移植到s5pv210
- RT3070无线网卡STA模式并使开发板接入Wifi上网
- 实现RT3070无线网卡STA模式并使开发板接入Wifi上网
- fl2440模块学习——RT3070无线网卡SoftAP模式实现路由器功能
- 无线AP——失败中的成功 rt3070的ad-hoc上网
- fl2440开发板 rt3070芯片——AP模式
- RT3070无线网卡STA模式
- FL2440——RT3070 STA模式 实现无线上网功能
- FL2440——RT3070 softAP模式 实现无线路由器功能
- C++函数的返回值——返回引用类型&非引用类型
- 无法连接到安全检查代理服务器 本地ip地址非法
- 函数,递归,头文件
- RMAN备份恢复小练习
- poj 3083 Children of the Candy Corn
- RT3070无线网卡AP模式——开发板实现路由功能并使客户端成功联网
- RAC 的维护
- 设置404页面跳转...
- MongoDB分片集群与复制集
- Mysql备份恢复笔记
- HDU 1005 Number Sequence(找规律,思维)
- [HDU1276]-Cash Machine
- 线段树之扫描线 自我小总结
- c++ 父类成员函数的参数中有子类类型的对象 (前置声明解决)