1. 程式人生 > >Linux 開發板4G轉WiFi熱點 手機連線熱點上網(三 WiFi模組的移植及AP的建立)

Linux 開發板4G轉WiFi熱點 手機連線熱點上網(三 WiFi模組的移植及AP的建立)

這裡對WiFi模組的驅動就不做詳細介紹,本篇文章可能會涉及兩款WiFi模組,一個是USB介面的WiFi模組,一個是SDIO介面的wifi模組,即AP6212,平臺可能涉及愛特梅爾和三星的4418兩個平臺。

本篇的記錄主要內容是:建立WiFi模組的AP熱點,並且客戶端裝置通過該熱點,藉助4G模組的網路連線外網。

建立WiFi的AP熱點涉及下面幾個軟體包或者軟體工具:

hostapd-0.8、hostapd-2.5、libnl-1.1.4、openssl-1.0.0

如果不瞭解libnl和openssl版本有什麼不同,儘量不要使用高版本,很可能會出問題,使用上面的兩個版本就可以,這兩個依賴庫官網都可下載(自行百度下載地址)。上面的hostapd有兩個版本,原因是0.8版本是USB的wifi模組原始碼資料中打包提供的,官網沒找到該版本,看來是廠家對其做了修改,以適應自己的USB WiFi模組;2.5版本就是官網通用版本可以下載得到,沒什麼特別需要注意的。為此WiFi模組的工具以廠家提供的為準最好,不會有相容性問題。

對於這兩個WiFi模組,他們執行的不同就是hostapd工具的不同,其他都一樣,這裡選擇AP6212做主要說明。hostapd工具為2.5的版本。

hostapd工具即為熱點的建立工具,libnl-1.1.4、openssl-1.0.0為其依賴庫,所以要先編譯libnl-1.1.4、openssl-1.0.0這兩個依賴庫。

注:編譯器自由指定,由需求決定。

openssl-1.0.0的編譯:

這個庫的編譯有點特殊,在配置之前先指定CC編譯器,即:CC=arm-linux-gnueabihf-gcc 

然後執行:

./config no-asm shared --prefix=/xxxx/openssl-1.0.0/install 
如果PC機沒有依賴庫問題就會自動生成Makefile檔案,一般不會有問題。生成Makefile後還需要修改它,修改的部分如下且修改為下面的情況即可:
CROSS_COMPILE=arm-linux-gnueabihf-
CC= $(CROSS_COMPILE)gcc
CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int
#CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
#CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
DEPFLAG= -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE
PEX_LIBS= 
EX_LIBS= -ldl
EXE_EXT= 
ARFLAGS= 
AR=$(CROSS_COMPILE)ar $(ARFLAGS) r
RANLIB= $(CROSS_COMPILE)ranlib
NM= $(CROSS_COMPILE)nm
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG= gcc
LIBDIR=lib
之後直接make以及make install即可。
libnl-1.1.4的編譯:

這個庫的編譯沒什麼複雜的,先執行下面的配置命令:

./configure --prefix=/xxxx/libnl-1.1.4/install CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld --enable-shared --enable-static --host=arm-linux-gnueabihf
之後直接make以及make install即可。
hostapd的編譯:

該工具的編譯不要configure的配置,直接使用hostapd目錄下的defconfig配置即可,即執行命令:cp defconfig .config

然後開啟.config檔案需要新增所依賴的庫路徑,如下所示:

CFLAGS += -I/xxxx/libnl-1.1.4/install/include
LIBS += -L/xxxx/libnl-1.1.4/install/lib
CFLAGS += -I/xxxx/openssl-1.0.0/install/include
LIBS += -L/xxxx/openssl-1.0.0/install/lib
另外解註釋下面兩個選項:
CONFIG_DRIVER_NL80211=y

CONFIG_TLS=openssl

執行make即可生成hostapd可執行工具。

到這裡需要的必要工具就編譯完成了,剩下的就是把它們拷貝到開發板了。具體的位置個人需求。把依賴庫和可執行檔案路徑都新增到環境變數中即可使用了。

建立熱點的命令如下:
insmod /lib/modules/bcmdhd.ko "firmware_path=/etc/firmware/fw_bcmdhd_apsta.bin" "nvram_path=/etc/firmware/nvram_ap6212.txt"

ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 up
udhcpd -fS /etc/udhcpd.conf&
hostapd -B /etc/hostapd.conf
這裡給出udhcpd.conf和hostapd.conf兩個檔案的配置:

udhcpd.conf配置:

start 192.168.2.2
end 192.168.2.100
interface wlan0
max_leases 20
remaining yes
auto_time 7200
decline_time 3600
conflict_time 3600
offer_time 60
min_lease 60
lease_file /etc/udhcpd.leases
opt dns 114.114.114.114           #192.168.1.2 192.168.1.10                        
option subnet 255.255.255.0                                            
opt router 192.168.2.1                                                
option domain local

hostapd.conf配置(開放式熱點):
interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=MyAP
channel=3
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0

還要建立一個udhcpd.leases檔案,路徑如前面udhcpd.conf配置檔案所示:

touch/etc/udhcpd.leases

為了確保執行的正確,請確保核心中有如下配置:



這樣執行執行命令後應該就可以搜尋到名為MyAP的熱點了。

當然了前面只是建立了AP熱點,且可自動分配IP地址,但是還無法上網。

為了使其能夠通過4G網路連線網際網路,那麼我們需要iptables工具來實現nat轉接。需要移植iptables工具,我這裡使用的版本是iptables-1.4.19。

配置的命令是:

./configure --prefix=/xxxx/iptables-1.4.19/install CC=arm-cortex_a9-linux-gnueabi-gcc LD=arm-cortex_a9-linux-gnueabi-ld --enable-shared --enable-static --host=arm-cortex_a9-linux-gnueabi --disable-ipv6 --disable-largefile
執行make和make install即可。

把編譯好的庫和可執行檔案拷貝到開發,並指定環境變數,即可使用了。

為了保證iptables工具的正確執行,那麼請確保核心開啟了下面的功能:


執行不報錯即可,執行iptables -A FORWARD -s 192.168.2.0/24 -o ppp0 -j ACCEPT命令測試一下,然後執行iptables -L看是否有規則,如果有那麼就說明沒問題。

那麼,WiFi模組通過4G模組上網的命令如下:

iptables -A FORWARD -s 192.168.2.0/24 -o ppp0 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -o ppp0 -j MASQUERADE
echo 1 >/proc/sys/net/ipv4/ip_forward #啟動轉發

完整的命令如下:
ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 up
udhcpd -fS /etc/udhcpd.conf&
iptables -A FORWARD -s 192.168.2.0/24 -o ppp0 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -o ppp0 -j MASQUERADE
echo 1 >/proc/sys/net/ipv4/ip_forward
hostapd -B /etc/hostapd.conf
為了方便,把上面的命令儲存為ap.sh檔案。

萬事具備了,下面給出WiFi熱點通過4G網絡卡上網的操作流程。

第一步:ppp.sh wcdma建立4G網路

第二步:ap.sh(注意路徑問題)

之後搜尋熱點連線,應該可以上網際網路了。