1. 程式人生 > >arm9+linux fl2440 實現RT3070無線網絡卡AP模式並使開發板接入Wifi上網

arm9+linux fl2440 實現RT3070無線網絡卡AP模式並使開發板接入Wifi上網

-----------------------------------------------------------------------------------------------------------

                                     主機作業系統:centos 6.7

                                     交叉編譯器版本:arm-linux-gcc-4.5.4
                                     開發板平臺:fl2440
                                     linux核心版本:Linux-3.0
                                     開發 模板:ralink rt3070

                                     Author:  shaocongshuai <[email protected]>

----------------------------------------------------------------------------------------------------------

RT3070與FL2440實現路由器功能,並使客戶端成功聯網

一、配置核心支援無線網絡卡softAP模式


二、配置無線網路的軟體移植

Hostapd依賴於openssllibnl這兩個庫。所以首先要移植

openssllibnlopenssl我們已經移植過了

libnl是提供基於Linux核心的netlink協議的API的庫的套件。 Netlink是核心與使用者空間程序之間主要的IPC機制。它相比ioctl設計得更加靈活,並提供了關於核心配置和監視介面的主要的通訊方式

1>移植libnl

libnl是為了方便應用程式使用netlink介面而開發的一個庫。這個庫為原始netlink訊息傳遞以及不同的netlink family專用介面提供了一個統一的介面。移植libnl1.1是hostapd的移植的一部分。hostapd使用的libnl庫為1.x版本,2.0版本的API與1.0的並不相容,故這裡移植1.1版本,但2.0移植方式相同。


下載地址 http://www.infradead.org/~tgr/libnl/

至官網下載libnl1.1,解壓縮,cd進入libnl目錄

[[email protected] libnl-1.1.4]$ mkdir install

[[email protected] libnl-1.1.4]$ ./configure --prefix=/home/shaocongshuai/libnl-1.1.4/install --host=arm-linux

[[email protected] libnl-1.1.4]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc

[[email protected] libnl-1.1.4]$ sudo make install

/install下的lib資料夾中的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的驅動

下載地址  http://w1.fi/hostapd/

[[email protected] hostapd-1.0]$ cd hostapd/

[[email protected] hostapd]$ cp defconfig .config

[[email protected] hostapd]$ vim .config

......

 22 # Driver interface for drivers using the nl80211 kernel interface
 23 CONFIG_DRIVER_NL80211=y

......

[[email protected] hostapd]$ vim Makefile

.....

  9 CFLAGS += -I../src
 10 CFLAGS += -I../src/utils
 11
 12 CFLAGS += -I /home/shaocongshuai/libnl-1.1.4/install/include
 13 CFLAGS += -I /home/shaocongshuai/openssl-0.9.8e/install/include
 14 LIBS += -L /home/shaocongshuai/libnl-1.1.4/install/lib/
 15 LIBS += -L /home/shaocongshuai/openssl-0.9.8e/install/lib/
 16 LDFLAGS += -L /home/shaocongshuai/libnl-1.1.4/install/lib/
 17 LDFLAGS += -L /home/shaocongshuai/openssl-0.9.8e/install/lib/

......

[[email protected] hostapd]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc

[[email protected] hostapd]$ sudo make install

將生成可執行命令hostapd下載到開發板的/bin目錄下

hostapd主要就在於配置檔案

對配置檔案hostapd.conf的修改

interface=wlan0   //網路介面名稱

driver=nl80211//預設使用nl80211無線驅動

ssid=scs//熱點名稱

channel=3//設定無線頻道

hw_mode=g//使用80211g協議標準 , 有效的值取決於硬體,通常:a, b, g

hw_mode需要你的硬體支援.'g'大多數都支援, 並向前相容802.11b..channel應該與其他AP被選擇在 20mhz (4 channels)之外,或者每邊10mhz (2 channels).這就意味著一個在channel 3的一個AP將干涉channel 1或者channel 5的AP.選擇一個channel.通常使用者的APs預設channel 6, 因此你使用channel 1或channel 11大多數情況下最佳. channels也依賴於本地規則.

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_passphrase=12345678//指定認證金鑰

wpa_key_mgmt=WPA-PSK  指定您想支援的加密金鑰演算法。您的選擇有 WPA-PSK、WPA-EAP 或兩者均使用。PSK 是預共享金鑰。EAP 是可擴充套件認證協議,是一個支援許多不同身份驗證方法的框架。對於小的預共享金鑰設定,不需要使用它。

wpa_pairwise=TKIP

//啟用了WPA或WPA2則需要指定wpa_pairwise或rsn_pairwise。

rsn_pairwise=CCMP

wpa_pairwise 和 rsn_pairwise控制支援加密資料的金鑰,您可以使用 CCMP、TKIP 或兩者均使用。CCMP 比 TKIP 更強,因此您可以嘗試僅支援 CCMP。Windows 客戶端以繁瑣和棘手的強安全性而聞名,因此您可能想讓 TKIP 支援它們。

無線區域網標準IEEE 802.11協議

*IEEE 802.111997年,原始標準(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(理論值)

修改後下載到開發板的/etc目錄下。如果編譯過程出現缺少庫的錯誤,請自行檢查你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裝置不會封鎖,資料的隨機程度不高,但是一般情況已經夠用。

~ >: hostapd -B /etc/hostapd.conf

Configuration file: /etc/hostapd.conf
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy0 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.
Using interface wlan0 with hwaddr 00:24:25:50:a9:4d and ssid 'test'
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
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 1, TXop: 47.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 1, TXop: 94.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 4, CWmax: 6, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.

3>配置udhcpd

因為是實現最基礎的功能,所以我們只要簡單的修改地址池、預設閘道器以及dns即可

[[email protected] busybox-1.20.2]$ vim examples/udhcp/udhcpd.conf

.....

  4 # The start and end of the IP lease block
  5 start       192.168.2.100
  6 end     192.168.2.254
  7
  8 # The interface that udhcpd will use
  9 interface   wlan0

....

 64 opt dns 8.8.8.8
 65 option  subnet  255.255.255.0
 66 opt router  192.168.2.1

...

#udhcpd /etc/udhcpd.conf   //就可以啟動dhcp伺服器了。

Udhcpd在執行的時候可能會提示沒有一個叫做udhcpd.release的租賃檔案,這個只要在相應的資料夾下建立即可。執行下面兩條命令:

#mkdir -p /var/lib/misc/#touch /var/lib/misc/udhcpd.leases

4>iptables移植

iptables簡介

iptables是基於核心的防火牆,功能非常強大,iptables內建了filter,natmangle三張表。

Filter負責過濾資料包,包括的規則鏈有,inputoutputforward

Nat則涉及到網路地址轉換,包括的規則鏈有,preroutingpostroutingoutput

Mangle則主要應用在修改資料包內容上,用來做流量整形的

預設的規則鏈有:INPUTOUTPUTNATPOSTROUTINGPREROUTING

INPUT匹配目的IP是本機的資料包,FORWARD匹配流經本機的資料包,PREROUTING用來修改目的地址用來做DNATPOSTROUTING用來修改源地址用來做SNAT

詳細的iptables的介紹 http://blog.chinaunix.net/uid-26495963-id-3279216.html

 下載地址  http://www.netfilter.org/projects/iptables/downloads.html
[[email protected] iptables-1.4.12]$ mkdir install

[[email protected] iptables-1.4.12]$ ./configure --host=arm-linux --enable-static --disable-shared --prefix=/home/shaocongshuai/iptables-1.4.12/install --disable-ipv6 --disable-largefile

[[email protected] iptables-1.4.12]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc CFALGS=--static LDFLAGS=-static

[[email protected] iptables-1.4.12]$ sudo make install

再理解一次CFLAGSLDFLAGS:一般我們通過CFLAGS-I選項告訴編譯器所依賴的第三方的庫的標頭檔案在哪裡,通過LDFLAGS-L選項告訴連結器這些庫的庫檔案在哪裡;還有LIBS是告訴連結器要連結哪些庫檔案。簡單地說,LDFLAGS是告訴連結器從哪裡尋找庫檔案,而LIBS是告訴連結器要連結哪些庫檔案。有時候LIBS指定了卻找不到庫時可以試試LDFLAGS

[[email protected] iptables-1.4.12]$ cd install/sbin/

[[email protected] sbin]$ file *

[[email protected] sbin]$ sudo /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip xtables-multi

strip減輕點重量

此時將/install/lib資料夾和xtables-multi打包放到開發板/lib/bin目錄下,賦予許可權後將xtables-multi改名為iptables

有了iptables命令工具之後我們便要來配置nat轉發表,如下

關於iptablesnat參考:

MASQUERADESNAT網路地址轉換的一種,SNAT的使用方法,即可以NAT成一個地址,也可以NAT成多個地址,但是,對於SNAT,不管是幾個地址,必須明確的指定destinationip.如果eth0是動態撥號獲取IP,那就需要MASQUERADE來實現SNAT。而我的eth0是接到路由器VAN上的,雖然路由器是撥號上網,但是我的eth0是自己指定的IP,每次都不會變,所以應該也可以使用SNAT的方式來配置iptables。不過我覺得MASQUERADE更方便,這就當為3G動態撥號直連做預熱吧。

由開頭知我GCC編譯器先是靜態編譯生成靜態庫檔案最後靜態連結生成的可執行程式。起初我是放任它編譯動態連結生成可執行檔案,然後直接把install下的/lib/extensive裡的.so全部拷貝到開發板上,再全放進檔案系統的/lib和/bin目錄下。

iptables定義規則的方式比較複雜: 格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION  -t table :3個filter nat mangle  COMMAND:定義如何對規則進行管理  chain:指定你接下來的規則到底是在哪個鏈上操作的,當定義策略的時候,是可以省略的  CRETIRIA:指定匹配標準  -j ACTION :指定如何進行處理

這樣提示我出錯:

>: iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE iptables v1.4.12: Couldn't load target `MASQUERADE':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

-A:追加,在當前鏈的最後新增一個規則

-o eth0:從這塊網絡卡流出的資料 流出一般在OUTPUT和POSTROUTING上 -i eth0:從這塊網絡卡流入的資料 流入一般用在INPUT和PREROUTING上 擴充套件各種模組 -m multiport:表示啟用多埠擴充套件

而報錯的MASQUERADE庫我的lib下是存在的,在反覆檢查核心配置MASQUERADE相關選項後我懷疑是有些相互依賴的庫沒有被拷貝到開發板上。因為我一時找不到到底是哪些庫,於是直接在make時指定環境變數靜態連結。問題解決。

所有的準備就緒後,我們一定要記得先實現eth0能上網。還以為是ipables的nat轉發命令的問題。連上路由器如果eth0都上不了網,自然談不上轉發。eth0要上網的話我們只要再給閘道器和DNS就可以了。

# 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

// 配置資料包轉發時候的介面

#route add default gw 192.168.1.1//設定預設閘道器為192.168.1.1 ;只有eth0聯網,這個預設就行。

至於DNS,linux系統並沒有直接配置DNS的命令列。網上都說在/etc/resolv.conf中修改,我們回顧STA模式DHCPC自動分配IP的時候列印資訊也有個recreating /etc/resolv.conf因為我在做根檔案系統的時候並沒有在/etc目錄下建立resolv.conf於是我又到檔案系統目錄樹裡面建立了一個。在新建的resolv.conf裡面新增nameserver:114.114.114.114//DNS

然後連上的wifi熱點就可以上網了。至此使用hostapd+udhcpd+iptables等工具基於核心mac80211驅動框架就實現了RT3070無線網絡卡的softAP!!!

相關推薦

arm9+linux fl2440 實現RT3070無線AP模式使開發接入Wifi上網

----------------------------------------------------------------------------------------------------

RT3070無線AP模式——開發板實現路由功能

RT3070無線網絡卡有兩種工作模式STA模式和softAP模式,分別由STA驅動和softAP驅動來實現,STA驅動支援無線網絡卡工作在STA模式下,可以連線到網路實現上網功能。而SoftAP的驅動支援無線網絡卡工作在softAP模式下,可以作為一個軟的

Rt3070無線AP功能移植到s5pv210

Rt3070無線網絡卡AP功能移植到s5pv210 一、平臺 開發板:GEC210  無線網絡卡:RT3070 主機:VMWare--Ubuntu 10.04 LTS 核心版本:linux-2.6.35.7   編譯器:arm-linux-gcc-4.5.1   所需原始碼

無線AP模式和station模式

AP模式: Access Point,提供無線接入服務,允許其它無線裝置接入,提供資料訪問,一般的無線路由/網橋工作在該模式下。AP和AP之間允許相互連線 Sta模式: Station, 類似於無線終端,sta本身並不接受無線的接入,它可以連線到AP,一般無線網絡卡即工作在該

移植linux-2.6.32到jz2440上以支援RT3070無線

**********************linux-2.6.32移植到jz2440上的note****************************** 1、修改Makefile 改為 ARCH ?= arm CROSS_COMPILE ?= arm-linux-

kali 3.14 安裝RT3070 無線驅動

最近對無線安全比較感興趣,買了個無線網絡卡,RT3070的晶片,去官網下了個linux的驅動,編譯安裝 rar, bunzip2, tar解壓,隨便說一下,tar解壓時需要自己重新命名,改為.tar的字尾 修改os/linux/ 下的config 檔案 # Support

linux下將無線工作模式切換為監聽模式

網上的辦法有些遺漏,根據它的方法會報錯如下: 即裝置忙,因此需要先關閉無線網絡卡,在無線網絡卡關閉狀態下改變工作模式: 關閉後執行如下命令 將工作模式切換到監聽模式之後再開啟無線網絡卡 成功: 輸入iwconfig即可看見mode變成了Monitor 完畢。 注意:

聯想筆記本linux不能啟動無線解決方法

1.每次開機不能使用無線網,輸入命令#sudo modprobe -r ideapad_laptop  //解除安裝ideapad_laptop模組,啟用無線網絡卡但是每次開機到要輸入一次這個命令,有點麻煩。2.進入/etc/modprobe.d/資料夾下建立.conf檔案,

小米和360隨身wifilinux(Ubuntu)下作無線教程

平臺: Ubuntu12.04  Ubuntu 13.04 說明: 隨身wifi本身無線網絡卡,但是廠商修改了PID,使其系統無法自動識別驅動。而改用他自帶的驅動軟體作為Ap來使用。 在裝置驅動管理,小米的晶片是ralink的MT7601U,去官網下載最新linux驅動就

linux-redhat6.4驅動無線rtl8188eu

無線網絡卡Realtek Semiconductor Cop. RTL8188EUS  首先下載安裝包: ​其中的0BDA是Realtek的程式碼,8179是裝置程式碼。從網上查到這個裝

iwconfig linux 命令列配置無線

iwconfig是Linux Wireless Extensions(LWE)的使用者層配置工具之一。LWE是Linux下對無線網路配置的工具,包括核心的支援、使用者層配置工具和驅動介面的支援三部分。目前很多無線網絡卡都支援LWE,而且主流的Linux釋出版本,比如Re

Linux Ubuntu下Atheros 無線 5GHz 工作頻段破解

###網上Google到的reghack是針對路由器的,路由器的晶片通常是MIPS和PowerPC架構。 ###而PC機是x86架構,所以下載的reghack.mips.elf程式不能在PC機上執行。 ###我們需要根據reghack原始碼在PC機上重新編譯適用於x86架構的reghack破解程式。 ###

Linux中USB無線實現AP模式(hostapd交叉編譯環境下)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

arm-linux 移植無線RT3070驅動

環境:編譯環境:Ubuntukylin 14.04交叉編譯器:arm-linux-gcc 4.4.1開發板核心:Linux2.6 & 3.0.1及以上無線模組:雷凌Ralink - rt3070一、核心版本:Linux 3.0及以上1、配置Linux核心1.1 進入

ARM上的linux如何實現無線的冷插拔和熱插拔

ARM上的linux如何實現無線網絡卡的冷插拔和熱插拔 fulinux 1. 冷插拔 如果在系統上電之前就將RT2070/RT3070晶片的無線網絡卡(以下簡稱wlan)插上,即冷插拔。我們通過分析系統啟動流程過程中的執行的指令碼,將啟動wlan的指令碼加入

Linux配置無線驅動實現無線上網

本機裝Linux,需要配置的無線驅動。一般Ubuntu都整合無線驅動,基本上無線可以直接使用! 01、檢視無線網絡卡的型號  [[email protected] software]# lspci    | grep  -i  network 03:00.0 Net

Linux 無線連線 WIFIWPA-PSK

Linux 無線網絡卡連線 WIFIWPA-PSK //編輯/etc/wpa_supplicant/wpa_supplicant.conf 檔案,內容如下 ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=whe

Kali Linux ——在無網路情況下安裝無線驅動

1、背景:   今日剛剛開始學習kali linux,眾所周知,安裝完成後,系統是沒有無線網絡卡驅動的,這就對學生黨造成相當的困擾:校園網要連線有線是需要認證客戶端的,而認證客戶端只有windows端,如此一來,無線網也連不上,有線網也連不上,這就......很尷尬。   因此我走訪各大部落格,雖然沒能直接解

linux deepin 無線不能用,打不開

今天安裝了NVIDIA的大黃蜂驅動,重啟,開機,無線網打不開了, (後來又看到藍芽功能沒了,忙碌中知道了wifi和藍芽是在一起的,一損俱損!) 折騰了一下午 首先,我上deepin官網找了一圈,沒解決 然後搜尋網絡卡對應的無線網絡卡驅動,糾結著用【lspci】裡的Realtek Semiconduct

Centos&Redhat下bcm43142博通無線linux驅動之二

上次通過更換核心實現成功編譯驅動無線網絡卡,但是啟動到系統原核心下依然沒有bcm43142的驅動,遂準備在原核心下編譯驅動,記錄一下 ps:更推薦這種方法,避免因更換核心出現其他相容性問題 1.準備驅動包 hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz 點我下載