今天給大家分享一個嵌入式Linux設備開啟無線AP/無線接入點(Wireless Access Point)的方法。
什麼情況下會用到無線AP?在我最近的工作中,有如下兩種情況需要用到:
(1)AP配網。設備熱點配網,智能硬件處於AP模式,手機作為STA連接到處於AP模式的智能硬件後組成局域網。此時,手機就可以通過局域網把設備即將連接的路由的ssid和pwd信息至智能硬件,智能硬件接收後,連接路由器,完成配網。
(2)把廢舊不用的板子作為開啟無線AP組建各設備的局域網通信。對於移動機器人的開發來說,設備實際工作過程中,無線調試無疑是最方便的。
因為設備一直處於運動狀態,如果接着有線,電腦需要跟着設備跑,很不方便。因為我們調試時,對路由器的需求比較大,而路由器比較有限,所以我把廢舊不用的板子配成了無線AP模式。
經過實測,相同距離,舊板子局域網通信速度略低於我們路由器,但不影響我們作為調試時使用。
嵌入式Linux設備,要開啟無線接入點需要準備如下四個文件:
其中,hostapd、udhcpd工具busybox中包含有。當然,也可以自己下載源碼進行編譯,方法可參照我們往期的博文:
RTL8723驅動移植+wpa_supplicant移植+SSH移植,編譯方法都是大同小異的。
注意區分:udhcpc、udhcpd工具。
udhcpc是dhcp撥號的客戶端。設備作為STA時,用於自動獲取IP。
udhcpd是dhcp撥號的服務器端。設備作為AP時,用於自動分配IP。
其中,我們的往期博文如何實現程序開機自啟動?中有用到udhcpc,本博文中我們用的是udhcpd。
下面給大家介紹一下hostapd及udhcpd的配置文件如何配置。
hostapd配置文件hostapd的配置文件可參考hostapd源碼下的hostapd.conf:

裡面的內容很多,實際中我們可能用不到那麼多配置,我們可以刪減、修改,只保留我們所需的配置。
我們刪減修改之後得到:
左右滑動查看全部代碼>>>
#APnetdevicenameinterface=wlan0#SSIDtobeusedinIEEE802.11managementframesssid=LinuxZn_AP#Driverinterfacetype(hostap/wired/none/nl80211/bsd);#default:hostap).nl80211isusedwithallLinuxmac80211drivers.#Usedriver=noneifbuildinghostapdasastandaloneRADIUSserverthatdoes#notcontrolanywireless/wireddriver.driver=nl80211#Interfaceforseparatecontrolprogram.#/var/run/hostapdistherecommendeddirectoryforsocketsandbydefault,#hostapd_cliwilluseitwhentryingtoconnectwithhostapd.ctrl_interface=/var/run/hostapd#Channelnumber(IEEE802.11)channel=5#ieee80211n:WhetherIEEE802.11n(HT)isenabled#0=disabled(default)#1=enabled#Note:YouwillalsoneedtoenableWMMforfullHTfunctionality.#Note:hw_mode=g(2.4GHz)andhw_mode=a(5GHz)isusedtospecifytheband.ieee80211n=1hw_mode=g#SendemptySSIDinbeaconsandignoreproberequestframesthatdonot#specifyfullSSID,i.e.,requirestationstoknowSSID.#default:disabled(0)#1=sendempty(length=0)SSIDinbeaconandignoreproberequestfor#broadcastSSID#2=clearSSID(ASCII0),butkeeptheoriginallength(thismayberequired#withsomeclientsthatdonotsupportemptySSID)andignoreprobe#requestsforbroadcastSSIDignore_broadcast_ssid=0#WPA/IEEE802.11iconfigurationwpa=2wpa_passphrase=12345678wpa_key_mgmt=WPA-PSKrsn_pairwise=CCMP該文件主要配置了:
我們把hostapd.conf配置文件我們放到板子上的/etc目錄下備用:

udhcpd的配置文件可參考udhcpd源碼下的udhcpd.conf:

同樣的,我們只保留如下內容:
左右滑動查看全部代碼>>>
#ThestartandendoftheIPleaseblockstart192.168.3.2end192.168.3.254#Theinterfacethatudhcpdwilluseinterfacewlan0optdns114.114.114.114optionsubnet255.255.255.0optrouter192.168.3.1optiondomainlocaloptionlease864000#10daysofseconds該文件主要配置了:
我們把udhcpd.conf配置文件放到板子上的/etc目錄下備用:

有了以上工具及相關配置文件之後,還需要進行一些操作,才可以開啟我們的熱點,我們把這些操作寫成腳本:
start_ap.sh:
左右滑動查看全部代碼>>>
#!/bin/bash#殺掉網卡操作相關的進程killallwpa_supplicantudhcpcdhcpcddnsmasqudhcpdhostapd>/dev/null2>&1#禁用網卡ifconfigwlan0down#啟用網卡ifconfigwlan0up#給無線網卡設置IP地址(網關地址)ifconfigwlan0192.168.3.1#啟動DHCPudhcpd/etc/udhcpd.conf#啟動熱點hostapd/etc/hostapd.conf-B開啟熱點:

連接測試:

可見,手機分配到的IP為192.168.3.2,屬於192.168.3.2~192.168.3.254的範圍,我們的設備熱點開啟成功!我們的PC可以連接這個熱點對設備進行調試。
以上就是本次的分享,如果覺得文章有幫助,麻煩幫忙轉發,謝謝!