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


修改Makefile


[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是基于内核的防火墙,功能非常强大,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,否则不能上网



阅读全文
0 0
原创粉丝点击