FL2440wifi模块学习之用rt3070芯片使开发板变为路由器上网
来源:互联网 发布:淘宝优惠券赚佣金算的 编辑:程序博客网 时间:2024/06/05 15:16
主机操作系统:Centos 6.7
交叉编译器版本:buildroot-2012.08
开发板平台: FL2440
Linux内核版本: linux-3.0
开发模块:开发板AP模式,变为路由器,设备可以接入上网
SoftAP模式。以开发板fl2440作为一个路由器,并使自己的手机、笔记本电脑连接到这个“路由器”上网。
一、配置内核支持无线网卡softAP模式
[*] Networking support ---> Networking options ---> [*] Network packet filtering framework (Netfilter) ---> [*] Advanced netfilter configuration Core Netfilter Configuration --->(除了下面选项外其他全选) < > SCTP protocol connection tracking support (EXPERIMENTAL) < > FTP protocol support < > SIP protocol support < > Transparent proxying support (EXPERIMENTAL) < > set target and match support < > CHECKSUM target support < > "CT" target support < > "DSCP" and "TOS" target support < > "NOTRACK" target support < > "TRACE" target support <*> IP set support ---> <*> bitmap:ip set support <*> bitmap:ip,mac set support <*> bitmap:port set support <*> list:set set support <*> IP virtual server support --->(除了下面选项外其他全选) [ ] IP virtual server debugging [ ] SCTP load balancing support < > FTP protocol helper IP: Netfilter Configuration --->(全选) <*> RF switch subsystem support --->
按照上面配置完make menuconfig选项后重新编译内核并烧录到开发板二、无线网络的软件工具移植
在这里我们会用到几个软件hostapd、udhcpd、iptables
1、Hostapd移植
Hostapd依赖于openssl与libnl这两个库。所以首先要移植openssl与libnl,openssl我们已经移植过了。
1.1移植libnl
下载解压后进入libnl-1.1
[fanmaolin@Centeros wifi]$ wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/libnl-1.1.tar.gz
[fanmaolin@Centeros wifi]$ cd libnl-1.1[fanmaolin@Centeros libnl-1.1]$ mkdir install[fanmaolin@Centeros libnl-1.1]$ ./configure--prefix=/home/fanmaolin/fl2440/3rdparty/wifi/libnl-1.1/install --host=arm-linux [fanmaolin@Centeros libnl-1.1]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[fanmaolin@Centeros libnl-1.1]$ make install
安装完毕后,进入本目录下的install下,将libnl.so.1拷贝到开发板/lib目录下。
1.2移植Hostapd
[fanmaolin@Centeros wifi]$ [fanmaolin@Centeros wifi]$ wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/hostapd-1.0.tar.gz
[fanmaolin@Centeros wifi]$ tar -xzf hostapd-1.0.tar.gz
[fanmaolin@Centeros wifi]$ cd hostapd-1.0/hostapd/[fanmaolin@Centeros hostapd]$ cp defconfig .config[fanmaolin@Centeros hostapd]$ vim .config 修改如下:22 # Driver interface for drivers using the nl80211 kernel interface 23 CONFIG_DRIVER_NL80211=y
[fanmaolin@Centeros hostapd]$ vim Makefile CFLAGS += -I../src CFLAGS += -I../src/utils CFLAGS += -I/home/fanmaolin/fl2440/3rdparty/wifi/libnl-1.1/install/include/ CFLAGS += -I/home/fanmaolin/fl2440/3rdparty/wifi/openssl-0.9.8e/install/include/ LIBS +=-L/home/fanmaolin/fl2440/3rdparty/wifi/libnl-1.1/install/lib/ LDFLAGS +=-L/home/fanmaolin/fl2440/3rdparty/wifi//libnl-1.1/install/lib/ LIBS +=-L/home/fanmaolin/fl2440/3rdparty/wifi//openssl-0.9.8e/install/lib/ LDFLAGS +=-L/home/fanmaolin/fl2440/3rdparty/wifi/openssl-0.9.8e/install/lib/ # Uncomment following line and set the path to your kernel tree include
[fanmaolin@Centeros hostapd]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc[fanmaolin@Centeros hostapd]$ make install
将生成的hostapd拷到开发板/bin目录下,给执行权限
将生成的hostapd.conf拷贝到开发板的/etc目录下进行修改
>: vi /etc/hostapd.conf
interface=wlan0//网络接口设备名称
ssid=fanmaolin //热点名称
driver=nl80211 //默认使用nl80211无线驱动
channel=3 //设定无线频道
hw_mode=g //使用80211g协议标准 , 有效的值取决于硬件,通常:a, b, g
ignore_broadcast_ssid=0 //开启或禁用广播ssid
auth_algs=1 /*指定OSA认证算法, auth_algs=1 只支持 WPA2 身份验证算法。auth_algs=2 表示支持 WEP。永远不要使用有线等效加密 (wired equivalent privacy, WEP),因为它非常容易破解,并且多年前就已经被完全破解了。auth_algs=3 表示支持这两种方式。
wpa=3 //指定WPA/WPA2类型, wpa=2 仅支持 WPA2。wpa=1 表示支持 WPA1,而 wpa=3 表示二者都支持。*/
wpa_key_mgmt=WPA-PSK //指定想支持的加密密钥算法
wpa_passphrase=12345678 //设置密码
wpa_pairwise=TKIP //启用了WPA或WPA2则需要指定wpa_pairwise或rsn_pairwise。
rsn_pairwise=CCMP //wpa_pairwise 和 rsn_pairwise控制支持加密数据的密钥,您可以使用 CCMP、TKIP 或两者均使用
hw_mode:指定802.11协议,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g;
===================================================================
无线局域网标准 IEEE 802.11协议
*IEEE 802.11, 1997年,原始标准(2Mbit/s,工作在2.4GHz)。
*IEEE 802.11b,1999年,物理层补充(11Mbit/s工作在2.4GHz)。
*IEEE 802.11g,2003年,物理层补充(54Mbit/s,工作在2.4GHz)。
使用最多的应该是802.11n标准,工作在2.4GHz频段,可达600Mbps(理论值)
===================================================================
*IEEE 802.11a,1999年,物理层补充(54Mbit/s,工作在5GHz)。
1.3启动wlan0
>: ifconfig wlan0 up>: ifconfigeth0 Link encap:Ethernet HWaddr A6:8D:07:50:27:9D inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:250 errors:0 dropped:0 overruns:0 frame:0 TX packets:114 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:25548 (24.9 KiB) TX bytes:12977 (12.6 KiB) Interrupt:51 Base address:0x4300 wlan0 Link encap:Ethernet HWaddr 00:A1:B0:40:6E:F7 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)
>: hostapd -B /etc/hostapd.conf 以守护进程在后台运行成功后打印如下信息
可以看到自己设置的热点名字
>: ifconfigeth0 Link encap:Ethernet HWaddr A6:8D:07:50:27:9D inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:501 errors:0 dropped:0 overruns:0 frame:0 TX packets:164 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:51942 (50.7 KiB) TX bytes:19249 (18.7 KiB) Interrupt:51 Base address:0x4300 mon.wlan0 Link encap:UNSPEC HWaddr 00-A1-B0-40-6E-F7-00-00-00-00-00-00-00-00-00-00 //并且新增了一个网络接口 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3226 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:793483 (774.8 KiB) TX bytes:0 (0.0 B)
现在打开手机可以看到有热点,但是无法连接
三、配置DHCP
这一步的目的是让手机等需要连网的设备自动获取IP
在开发板/etc/目录下创建udhcpd.conf,你也可以拷贝之前在busybox里做好的,进行修改。
>: vi /etc/udhcpd.conf start 192.168.4.10end 192.168.4.254interface wlan0opt dns 8.8.8.8option subnet 255.255.255.0opt router 192.168.4.1~
创建租赁文件
>: mkdir -p /var/lib/misc/>: touch /var/lib/misc/udhcpd.leases>:
>: ifconfig wlan0 192.168.4.1 netmask 255.255.255.0//创建接入点>: echo "nameserver 8.8.8.8" > /etc/resolv.conf//设置DNS>: udhcpd -f /etc/udhcpd.conf//启动DHCP我们可以看到开发板分配IP到设备,并且分配的IP是我设置的第一个IP
>: ping 192.168.4.10//ping一下手机看能否连通PING 192.168.4.10 (192.168.4.10): 56 data bytes64 bytes from 192.168.4.10: seq=0 ttl=64 time=7.234 ms64 bytes from 192.168.4.10: seq=1 ttl=64 time=120.565 ms64 bytes from 192.168.4.10: seq=2 ttl=64 time=38.421 ms64 bytes from 192.168.4.10: seq=3 ttl=64 time=7.546 ms^C--- 192.168.4.10 ping statistics ---4 packets transmitted, 4 packets received, 0% packet lossround-trip min/avg/max = 7.234/43.441/120.565 ms
看手机上的WiFi信息,已经可以连上了,突然发现手机上有套索截图的功能,试了一下,丑爆了
来看一下具体的信息
四、移植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。
[fanmaolin@Centeros wifi]$ wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/iptables-1.4.12.tar.bz2[fanmaolin@Centeros wifi]$ tar -xjf iptables-1.4.12.tar.bz2
[fanmaolin@Centeros wifi]$ cd iptables-1.4.12[fanmaolin@Centeros iptables-1.4.12]$ mkdir install[fanmaolin@Centeros iptables-1.4.12]$ ./configure --host=arm-linux --enable-static --disable-shared --prefix=/`pwd`/install --disable-ipv6 --disable-largefile[fanmaolin@Centeros iptables-1.4.12]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc CFALGS=--static LDFLAGS=-static
[fanmaolin@Centeros iptables-1.4.12]$ make install
install/lib文件夹的文件放到开发板的/lib目录下install/sbin/下的xtables-multi放到开发板的/bin目录下给执行权限重命名为iptables。
>: ll /bin/iptables -rwxr-xr-x 1 root root 1150770 Jan 5 12:19 /bin/iptables因为我们是通过路由器上网的,首先要确保开发板能够上网,即eth0连网
>: ifconfigeth0 Link encap:Ethernet HWaddr 02:10:00:D4:E0:CBinet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:353 errors:0 dropped:0 overruns:0 frame:0TX packets:61 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:36205 (35.3 KiB) TX bytes:7363 (7.1 KiB)Interrupt:51 Base address:0x4300在开发板上配置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 //开启内核转发>: route add default gw 192.168.2.1 //配置好默认网关>: udhcpd -f udhcpd.conf//启动udhcpd (v1.20.2) startedSending OFFER of 192.168.4.10Sending OFFER of 192.168.4.10Sending OFFER of 192.168.4.10Sending OFFER of 192.168.4.10Sending ACK to 192.168.4.10Sending OFFER of 192.168.4.10Sending ACK to 192.168.4.10
Ok了,手机可以上网。
总结一下使开发板能够当做路由器使用的步骤:
移植各种工具包,上面有
1、ifconfig wlan0 up//启动网卡wlan0
2、hostapd -B /etc/hostapd.conf //守护进程后台运行
3、ifconfig wlan0 192.168.4.1 //设置接入点ip
4、echo "nameserver 8.8.8.8">/etc/resolv.conf (之前已经配置过的话后面可以省略)
5、udhcpd -f /etc/udhcpd.conf //启动,此时可以看到热点信息,但不能上网
6、配置iptables
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
7、
>: echo "1" >/proc/sys/net/ipv4/ip_forward//开启内核转发>: route add default gw 192.168.2.1>: udhcpd -f udhcpd.conf
问题总结:
1、
>: hostapd -B hostapd.conf
Configuration file: hostapd.conf
Failed to create interface mon.wlan0: -23 (Too many open files in system)
Try to remove and re-create mon.wlan0
Using interface wlan0 with hwaddr 00:a1:b0:40:6e:f7 and ssid 'fanmaolin'
random: Cannot read from /dev/random: Resource temporarily unavailable
random: Only 0/20 bytes of strong random data available from /dev/random
random: Not enough entropy pool available for secure operations
WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects
执行hostapd -B hostapd.conf 时要么在hostapd.conf文件的当前路径下执行,要么hostapd -B /etc/hostapd.conf,指明文件路径 ,问题解决,其他类似的命令也要注意路径问题。
2、
>: udhcpd -f /etc/udhcpd.conf
udhcpd (v1.20.2) started
Sending OFFER of 192.168.1.10
Sending ACK to 192.168.1.10
虽然给了Ip而且可以连上热点,但就是不能上网,原因是我设置为192.168.1.x与实验室其他路由器冲突,后面改为192.168.4.x就可以了
3、
要重点理解路由器上网的原理,现在我们把开发板做成路由器,开发板是通过路由器上网的,所以第一步必须保证开发板的一个网络接口,比如eth0可以上网.
4、注意网关的配置问题
>: route add default gw 192.168.2.1
要设置为你的开发板连接的路由器的Ip,否则不能上网
- FL2440wifi模块学习之用rt3070芯片使开发板变为路由器上网
- FL2440WiFi学习之rt3070无线网卡动态获取IP上网
- FL2440-WiFi模块学习之用rt3070无线网卡使开发板上网
- 利用fl2440开发板和rt3070模块实现简单路由器制作
- fl2440模块学习——添加RT3070实现无线上网
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 基于fl2440 开发板rt3070芯片工作在station模式
- fl2400开发板rt3070芯片—station模式
- fl2440开发板 rt3070芯片——AP模式
- arm9+linux fl2440 实现RT3070无线网卡AP模式并使开发板接入Wifi上网
- RT3070无线网卡STA模式并使开发板接入Wifi上网
- 实现RT3070无线网卡STA模式并使开发板接入Wifi上网
- fl2440模块学习——RT3070无线网卡SoftAP模式实现路由器功能
- RT3070之STA模式实现无线上网
- S3C2440开发板+RT3070无线网卡 基于hostapd+udhcpd+iptables实现softAP模式(路由器)
- 选择排序(select sort)
- JDBC入门基本点(举例mysql)
- greenrobot 开源 android
- MFC绘图
- 《Using OpenRefine》翻译~15
- FL2440wifi模块学习之用rt3070芯片使开发板变为路由器上网
- CSS简介
- Unity编辑器扩展
- Android&H5互调
- 重写hashcode和equals的原因探究
- 骂人神经病和精神病是不道德行为和违犯中华人民共和国法律行为。
- L先生与晨跑(找规律 先手后手博弈)
- Android绘制类似电脑版qq的箭头
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)