使用WIFI網卡的AP功能


前幾篇博客中,wifi無線網卡都工作於STA模式,那么它能否工作於AP模式。本篇博客就研究使wifi 無線網卡工作於AP模式。
使用一個應用程序hostapd,關於它的介紹可以去此網站https://wireless.wiki.kernel.org/en/users/documentation/hostapd了解一下。
1.1 下載源碼  :http://w1.fi/hostapd/

1.2 編譯、安裝

tar xzf hostapd-2.0.tar.gz
cd hostapd-2.0/
cd hostapd/
cp defconfig .config
修改.config, 加一行: CONFIG_LIBNL32=y
修改Makefile:
CC=arm-linux-gcc
make
make DESTDIR=$PWD/tmp install

把生成的hostapd hostapd_cli復制到NFS的bin目錄

1.3 使用hostapd的配置文件以支持 :WPA/WPA2

1.3.1 使用hostapd的配置文件
#change wlan0 to your wireless device
interface=wlan0 //指定使用哪一個網卡
driver=nl80211 //指定使用哪一個驅動
ssid=s3c2440 //AP的名字是什么
channel=1

# 認證/加密方式
macaddr_acl=0 //用來控制mac地址的過濾。
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=baiwenwang
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

把配置文件存為/etc/myhostapd.conf
啟動 hostapd: hostapd -B /etc/myhostapd.conf

ps 可以查看一下,將會看到下面的這個進程在運行了。
hostapd -B /etc/myhostapd.conf
用手機看一下,能否使用wifi 網卡這個AP。即手機處於STA模式,wifi 網卡處於AP模式。

打開手機,將會觀察到s3c244o這個AP已經存在了,但是連接后,會出現一種現象:

正在獲取ip地址(一直這樣),這個ip是從AP上獲取,即從s3c2440上面去獲取。一直獲取不到的原因是什么呢?

需要我們在開發板上開啟一個dhcpd的服務,讓它給STA設備(在這里就指手機)分配ip。

1.3.2  啟動dhcpd服務

修改配置文件/etc/dhcpd.conf,添加:
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.100;
  option domain-name-servers 192.168.1.1;
  option routers 192.168.1.1;
}

此時如果直接運行dhcpd -cf /etc/dhcpd.conf wlan0,會出現下面的問題:
can't open lease database /var/db/dhcpd.lease: No such file or directory

 

創建空文件/var/db/dhcpd.leases:
> /var/db/dhcpd.leases  //命令 >就表示生成一個文件,里面的內容是空的。

再次運行dhcpd -cf /etc/dhcpd.conf wlan0,會出現下面的問題:
No subnet declaration for wlan0(no IPv4 address),沒有給wifi網卡配置IP地址。

ifconfig wlan0 192.168.1.1
dhcpd -cf /etc/dhcpd.conf wlan0

此時再來實驗一下,利用手機能否連接上wifi 網卡這個AP。

正在從s3c244o獲取IP地址---->已連接到s3c2440

ping 192.168.1.10(利用wifi 網卡去ping 手機),是可以ping的通的。

問題:怎么確定處於STA模式的設備(在此處指的是手機)ip地址是192.168.1.10呢?

在/etc/dhcpd.conf文件中已經指定了,處於STA模式的設備的ip地址范圍:range 192.168.1.10 192.168.1.100;

這和常識正好對應起來,一個AP可以被很多處於STA模式的設備所連接。

1.3.3 能否用命令來查看有多少個客戶端連接到wifi 網卡這個AP呢?

執行:hostapd_cli
could not connect to hostapd -re-trying
配置文件中還缺少這些一些內容。什么內容呢?
在利用wpa_supplicant這個工具時,wpa_supplicant與wpa_cli進行通信需要指定一個socket文件。
同樣在這個地方也需要指定。hostapd與hostapd_cli是通過socket文件進行通信的。如果不指定的話,hostapd_cli無法連接hostapd

 修改 hostapd的配置文件

ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 認證/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=baiwenwang
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

 

hostapd_cli 進入交互模式:

all_sta  看一下有多少個STA連接到了AP。

會顯示MAC地址等信息,但是在這個地方是看不到ip的。ip在哪看呢?

在 var/db/dhcpd.leases中會看到它的ip。
在這個文件中,可以通過它的mac地址,去查找它的ip地址。

1.4 OPEN方式的配置文件
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 認證/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

1.5 WEP方式的配置文件
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 認證/加密方式
macaddr_acl=0
auth_algs=2
ignore_broadcast_ssid=0
wep_key0="baiwenwang123"
wep_default_key=0

1.6 修改/etc/mdev.conf自動啟動AP模式
cat /etc/mdev.conf
wlan0 0:0 777 * /sbin/auto_wifi_ap.sh

cat /sbin/auto_wifi_ap.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
  hostapd -B /etc/myhostapd.conf
  ifconfig wlan0 192.168.1.1
  dhcpd -cf /etc/dhcpd.conf wlan0
else
  killall hostapd
  killall dhcpd
fi

注意事項:
對於包含了AR9271網卡驅動的內核,有一個問題:
在上電之前就接上了網卡,那么系統啟動后無法識別出這個網卡。
解決方法:
1.上電后再接網卡
2.把驅動編譯為模塊,當系統啟動后再insmod: 可以在上電之前就接網卡

可能原因:ath9k_htc.ko要用到固件, 但是固件要到根文件系統被掛載后才能訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM