========================================================
作者:guanlei<995318056@qq.com>
内核版本:linux-3.0
交叉编译器:arm-linux 4.5.4
开发平台:fl2440
==========================================================================
本篇文章介绍的是如何使用rt3070芯片工作在AP模式,在此声明发射的wifi并不能上网,只能连接用作局域网
访问外网请看续篇!
1:配置内核支持无线网卡softAP模式
在--Networking support
<*>RF switch subystem support ----> //这个一定要选上不然会出错
错误提示
>:hostapd hostapd.conf
Configuration file:hostapd.conf
rfkill:Cannot open RFKILL control device
在移植hostapd之前要移植openssl和libnl,只是因为在移植hostapd时候需要openssl和libnl这两个库
1.1移植Openssl-0.9.8e
下载地址 http://www.openssl.org/source/old/0.9.x/
解压修改Makefile (严格按照makefile格式,不要多空格)
29: INSTALLTOP=/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8e/install
#mkdir install
#sudo make &&make install (如果出错了检查你的makefile是不是哪里改的不对,有没有按照makefile的格式来,或者没有多加的空格!!!!这个错误要命的)
1.2移植 libnl-1.1.4
下载地址http://www.infradead.org/~tgr/libnl/
解压开始安装
./configure --prefix=/home/guanlei/fl2440/3rdparty/rt3070/libnl-1.1.4/install(指定安装路径) --host=arm-linux
#make CC= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
# sudo make install
在你的安装目录里边找到libnl.so.1下载到你的开发板上
1.3 移植Hostapd-1.0.tar.gz
下载地址http://download.chinaunix.net/download.php?id=40061&ResourceID=4450
解压修改Makefile 和.config
# cp defconfig .config
#vi .config
23:CONFIG_DRICER-NL80211=Y
#vi Makefile (这里就用到了openssl和libnl的头文件和库了 一定要保证之前都没出错!)
12 CFLAGS +=-I/home/guanlei/fl2440/3rdparty/rt3070/libnl-1.1.4/install/include/
13 CFLAGS +=-I/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8e/install/include/
14 LIBS +=-L/home/guanlei/fl2440/3rdparty/rt3070/libnl-1.1.4/install/lib/
15 LDFLAGS +=-L/home/guanlei/fl2440/3rdparty/rt3070/libnl-1.1.4/install/lib/
16 LIBS +=-L/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8e/install/lib/
17 LDFLAGS +=-L/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8e/install/lib/
#make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-inux-gcc
#sudo make install
这时就生成了hostapd和配置文件hostapd.conf (这个文件可以看就一下)
在配置hostapd.conf时参考了网上的很多资料,参考如下:
http://www.linuxidc.com/Linux/2012-12/75869.htm
http://blog.sina.com.cn/s/blog_8f5893e501016kd8.html
在面是我的配置
interface=wlan0
driver=nl80211
ssid=guanlei
channel=3
hw_mode=g
ignore_broadcast_ssid=0
auth_algs=1
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
上面列出的配置基本上是必须的,其中:
- ssid:别人所看到的我们这个无线接入点的名称;
- 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.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(理论值)
===================================================================
- channel:设定无线频道;
- interface:接入点设备名称,注意不要包含ap后缀,即如果该设备称为wlan0ap,填写wlan0即可;
- bridge:指定所处网桥,对于一个同时接入公网、提供内部网和无线接入的路由器来说,设定网桥很有必要;
- driver:设定无线驱动,我这里是nl80211;
- macaddr_acl:可选,指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部RADIUS服务器;
- accept_mac_file:指定允许MAC列表文件所在;
- deny_mac_file:指定禁止MAC列表文件所在;
其中auth_algs指定采用哪种认证算法,采用位域(bit fields)方式来制定,其中第一位表示开放系统认证(Open System Authentication, OSA),第二位表示共享密钥认证(Shared Key Authentication, SKA)。我这里设置alth_algs的值为1,表示只采用OSA;
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
#wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
现在推荐的加密方式是WPA/WPA2,由于时间紧迫,我没有怎么去了解过这两者的差别。不过配置是很简单的:
- wpa:指定WPA类型,这是一个位域值(bit fields),第一位表示启用WPA,第二位表示启用WPA2。在我的配置中,无论设置成1、2或3,都可以正常连接;
- wpa_passphrase:WPA/WPA2加密需要指定密钥,这个选项就是配置WPA/WPA2的密钥。注意wpa_passphrase要求8~63个字符。另外还可以通过配置wpa_psk来制定密钥,不过要设置一个256位的16进制密钥,不适合我们的需求;
- wpa_pairwise/rsn_pairwise:如果启用了WPA,需要指定wpa_pairwise;如果启用了WPA2,需要指定 rsn_pairwise,或者采用wpa_pairwise的设定。都可以设定成TKIP、CCMP或者两者都有,具体含义我也没仔细弄清楚。一篇比较 老的文章说TKIP不兼容Windows Mobile。
如果编译过程出现缺少库的错误,请自行检查你hostapd所依赖的libnl库和openssl库是否成功交叉编译。
若出现读取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.htm1.4.配置udhcpd
1,修改IP池
起始IP的后两位可以随意,但必须在一个网段
192.168.x.y
192.168.x.z
2 修改执行dhcp功能的接口可以用过ifconfig -a或者iwconfig命令来查看接口
3,修改DNS、网关、netmask等
opt dns 8.8.8.8 # DNS地址
option subnet 255.255.255.0 #子网掩码
opt router 192.168.2.1 #网关
其他默认即可
1.5 自动分配ip链接wifi
>: ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 (先把要接入点设备设置好)
>: udhcpd -f /etc/udhcpd.conf
(注意!!!)这里执行的时候可能会出错!!!
>: udhcpd -f /etc/udhcpd.conf
udhcpd (v1.20.2) started
udhcpd: can't open '/var/lib/misc/udhcpd.leases': No such file or directory
解决办法:
可能会提示没有一个叫做udhcpd.release的租赁文件,这个只要在相应的文件夹下创建即可。执行下面两条命令:
#mkdir -p /var/lib/misc/
#touch /var/lib/misc/udhcpd.leases
>:udhcpd -f /etc/udhcpd.conf
udhcpd (v1.20.2) started
Sending OFFER of 192.168.2.20
Sending ACK to 192.168.2.20
Sending ACK to 192.168.2.20
Sending ACK to 192.168.2.20
现在打开手机的wifi看一下能不能连上wifi
连接成功!!!但是还不能上网!!!如果想通过wifi上网见续篇!!!