基於飛凌2440開發板rt3070工作在AP模式

========================================================

作者: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.11a1999年,物理層補充(54Mbit/s,工作在5GHz)。

    *IEEE 802.11b1999年,物理層補充(11Mbit/s工作在2.4GHz)。

    *IEEE 802.11g2003年,物理層補充(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=1

其中auth_algs指定採用哪種認證算法,採用位域(bit fields)方式來制定,其中第一位表示開放系統認證(Open System Authentication, OSA),第二位表示共享密鑰認證(Shared Key Authentication, SKA)。我這裏設置alth_algs的值爲1,表示只採用OSA;

  wpa=2
  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 -B hostapd.conf 即可

如果編譯過程出現缺少庫的錯誤,請自行檢查你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.htm
 1.4.配置udhcpd
修改/opt/busybox-1.20.2/examples/udhcp/udhcpd.conf然後拷貝到開發板/etc目錄下
修改是參考了這幾個文檔:
http://jingyan.baidu.com/article/4853e1e573c4661908f7264f.html
下面是我的修改


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上網見續篇!!!





發佈了30 篇原創文章 · 獲贊 25 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章