admin管理员组文章数量:1565353
**************************************************************************************************************************************************************************************
开发板 :fl2440
CPU : s3c2440
linux内核 :linux-3.0
交叉编译器:arm-linux-gcc
开发模块 :RT3070
****************************************************************************************************************************************************************************************
前言:上篇博文是利用RT3070无线网卡通过其STA模式实现fl2440开发板无线连接路由器上网功能,而本篇博文是通过RT3070的另外一种模式SOftAP实现fl2440开发板作为路由器功能,手机,电脑等设备能连接开发板上网。因为linux3.0以上的内核中已经含有了RT3070的通用mac80211驱动框架,所以我们只需要在linux内核中添加相应的驱动支持,利用第三方软件实现RT3070的SoftAP模式。需要用到的工具有:hostapd、udhcpd、iptables。
1.内核配置
[*] 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编译之后重新将内核烧录到开发板。
2.软件工具下载移植
2.1.HOSTPAD移植
Hostapd依赖于openssl与libnl两个库。而openssl在上次已移植,则我们只需移植libnl即可。
(1)libnl移植
libnl官方介绍:
The libnl suite is a collection of libraries providing APIs to netlink protocol based Linux kernel interfaces.
This package is known to build and work properly using an LFS-8.0 platform.
******************************************************************************************
注意:Hostapd使用的libnl库为1.x版本,2.0版本的API与1.0的并不兼容,这里移植1.1版本。
**************************************************************************************************************************
下载,解压,安装libnl,
[zoulei@CentOS tftp]$wget wget http://www.infradead/~tgr/libnl/files/libnl-1.1.tar.gz
[zoulei@CentOS tftp]$tar zvxf libnl-1.1.tar.gz
[zoulei@CentOS tftp]$cd libnl-1.1
[zoulei@CentOS libnl-1.1]$ mkdir install
[zoulei@CentOS libnl-1.1]$ ./configure --prefix=`pwd`/install --host=arm-linux
[zoulei@CentOS libnl-1.1]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[zoulei@CentOS libnl-1.1]$ sudo make install
安装完毕后,进入本目录下的install下,将libnl.so.1拷贝到开发板/lib目录下
(2)Hostapd移植
hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证,
RADIUS客户端,EAP服务器和RADIUS 认证服务器。Linux下支持的驱动有:Host AP,madwifi,基于mac80211的驱动。
arm-linux-readlf -d ./hostapd 命令查看hostapd工具所依赖的库
这就是移植libnl的原因。
下载,解压,移植hostapd
[zoulei@CentOS tftp]$ wget http://w1.fi/releases/hostapd-1.0.tar.gz
[zoulei@CentOS tftp]$ cd hostapd-1.0
[zoulei@CentOS hostapd-1.0]$ cd hostapd/
[zoulei@CentOS hostapd]$ cp defconfig .config
[zoulei@CentOS hostapd]$vim .config
对.config文件修改:
# Driver interface for Host AP driver
#CONFIG_DRIVER_HOSTAP=y
# Driver interface for drivers using the nl80211 kernel interface
CONFIG_DRIVER_NL80211=y
修改Makefile:
[zoulei@CentOS hostapd]$vim Makefile
9 CFLAGS += -I../src
10 CFLAGS += -I../src/utils
11
12 CFLAGS += -I /tftp/libnl-1.1/install/include
13 CFLAGS += -I /tftp/openssl-1.0.0s/install/include
14 LIBS += -L /tftp/libnl-1.1/install/lib
15 LIBS += -L /tftp/openssl-1.0.0s/install/lib
16 LDFLAGS += -L /tftp/libnl-1.1/install/lib
17 LDFLAGS += -L /tftp/openssl-1.0.0s/install/lib
18 # Uncomment following line and set the path to your kernel tree include
19 # directory if your C library does not include all header files.
20 # CFLAGS += -DUSE_KERNEL_HEADERS -I/usr/src/linux/include
修改Makefile,追加以下字段OPENSSL_PATH,LIBNL_PATH分别是openssl,libnl的安装路径.
[zoulei@CentOS hostapd]$ makeCC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[zoulei@CentOS hostapd]$ sudo make install
将生成的hostapd拷到开发板/usr/bin目录下,并给予可执行权限。
3.开发板上操作
首先用网线连接开发板,网线的另一端连接路由器的LAN口。
*************************************************************************************************************************************
注意:开发板的ip地址与所连接的路由器一定要在同一网段内,这样就可以通过ssh代理远程登陆开发板了,不过这是用网线连接实现。
所以后面测试的时候不要用自己的电脑来连接fl2440开发板实现的路由器。否则ssh代理登陆开发板就会自动掉线,这时候就又得重设
开发板的ip,感觉特别麻烦,不过你也可以直接用串口来登陆开发板。
*************************************************************************************************************************************
3.1.hostapd.conf文件配置
在开发板/etc目录下创建这个文件hostapd.conf:
interface=wlan0 //网络接口名称
ssid=zoulei //热点名称
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 或两者均使用*/
3.2.启动wlan0
插上RT3070无线网卡,开发板的系统内核打印相关信息。
(1)ifconfig wlan0 up:开启无线网卡wlan0
ifconfig查看:
(2)以守护进程启动
>: /usr/bin/hostapd -B /etc/hostapd.conf
********************************************************************************************************
注意:出现随机数问题可采用符号链接解决
>:mv /dev/random /dev/random
>:ln -s /dev/urandom /dev/random
********************************************************************************************************
这时候ifconfig可以发现多了一个网络接口:
此时电脑和手机已经能搜到wifi信号了,但是这时是连不上的,因为还没有给电脑的无线网卡分配IP。
3.3.DHCP
我们需要启动DHCP服务器,让手机或者电脑自动能获取IP。busybox已经集成了udhcpd。
同样我们可以在busybox-1.20.2/examples/udhcp/ 下修改配置文件udhcpd.conf,然后拷到开发板上。也可以直接在开发板上新建,
由于我们目前只需要最基础的功能,所以选择在开发板/etc目录下新建这个文件,内容如下:
>: vi udhcpd.conf
start 192.168.3.16
end 192.168.3.254
interface wlan0
opt dns 114.114.114.114
option subnet 255.255.255.0
opt router 192.168.3.1
启动dhcp服务:
>:mkdir -p /var/lib/misc/
>:touch /var/lib/misc/udhcpd.leases //创建租赁文件
>:ifconfig wlan0 192.168.3.1 netmask 255.255.255.0 //设置接入点
>:echo "nameserver 8.8.8.8" > /etc/resolv.conf //DNS
>:udhcpd -f /etc/udhcpd.conf //启动DHCP
连接wifi成功则打印如下信息:
udhcpd (v1.20.2) started
Sending OFFER of 192.168.3.16
Sending ACK to 192.168.3.16
*************************************************************************************************************************
注意:这时候使用手机连接Fl2440开发板实现的路由器,如果是用ssh代理连接开发板的话,最好别用电脑连接。
这个ip地址就是路由器分配给手机的,因为只有一个手机连接,故为我设置的首ip.
**************************************************************************************************************************
ping手机ip测试:
但是这时候还是不能上网的,我们还需要移植iptables。
4.iptables移植
-----------------------------------------------------------------------------------------------------------------------------------------------
介绍:iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务
器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置,
-----------------------------------------------------------------------------------------------------------------------------------------------
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。
4.1.iptables下载解压,移植:
[zoulei@CentOS tftp]$wgethttps://coding/u/sfantree/p/self_use_OSS/git/raw/master/source/iptables-1.4.12.tar.bz2
[zoulei@CentOS tftp]$tar xvjf iptables-1.4.12.tar.bz2
[zoulei@CentOS tftp]$cd iptables-1.4.12/
[zoulei@CentOS iptables-1.4.12 ]$mkdir install
[zoulei@CentOS iptables-1.4.12 ]$./configure--host=arm-linux--enable-static--disable-shared--disable-ipv6
--disable-largefile--prefix=`pwd`/install
[zoulei@CentOS iptables-1.4.12 ]$makeCC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gccCFALGS=--staticLDFLAGS=-static
[zoulei@CentOS iptables-1.4.12 ]$make install
[zoulei@CentOS iptables-1.4.12 ]$cd install
[zoulei@CentOS install ]$ls
bin include lib sbin share
[zoulei@CentOS install ]$cd sbin/
[zoulei@CentOS install ]$ls
将/install/lib文件夹的文件和xtables-multi打包放到开发板/lib和/usr/bin目录下,赋予权限后将xtables-multi重命名为iptables
4.2.iptables配置
首先要确保eth0是可用的,能上网的,因为我的开发板连上了一个路由器。
采用DHCP
ifconfig eth0 up
udhcpc -i eth0
采用静态IP设置
ifconfig eth0 up
ifconfig eth0 192.168.2.60
route add default gw 192.168.2.1
echo "nameserver 114.114.114.114" > /etc/resolv.conf
******************************************************************************************************************************************************
注意:我的开发板连接的路由器的网关是192.168.2.1,我的开发板要和所连接的路由器要在同一网段内,才是那么设置的。所以我们连接的
路由器不同,开发板的有线网卡ip也将不同。
*******************************************************************************************************************************************************
测试之后发现我的eth0有线网卡是可以上网的。
在开发板上iptables配置 :/*使用iptables命令接着配置nat转发表*/
>:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE /*将局域网内地址通过eth0接口伪装后转发出去*/
>:iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT /*开启转发功能,允许已建立连接及相关连接对内转发*/
>:iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT /*对外转发,数据包从wlan0流向eth0*/
>:echo "1" >/proc/sys/net/ipv4/ip_forward //开启内核转发
>:route add default gw 192.168.2.1 //配置好默认网关
>:udhcpd -f udhcpd.conf //启动
4.3.连接再次测试
版权声明:本文标题:fl2440-RT3070无线网卡(AP模式)实现路由器功能 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726744248a1082900.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论