========================================================
作者:guanlei<[email protected]>
內核版本: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上網見續篇!!!