可以去鏈接看更詳細的,第一次用博客,這個編輯方式太不友好了。
文檔:全志a33--系統移植--ap6210WiFi模塊移?..
鏈接:http://note.youdao.com/noteshare?id=85b43ef1977c0b8d75f9e57b9a637845&sub=9BBA64D369974A72B68D7EAB02DCF19F
一、准備工作
1、新建文件夾WiFi_AP
2、下載OpenSSL下載地址 https://www.openssl.org/source/old/,在這里我所下載的版本是openssl-1.0.2l.tar.gz 下載地址https://www.openssl.org/source/old/1.0.2/openssl-1.0.2l.tar.gz ,將下載到的文件拷貝到WiFi_AP,並解壓
3、下載libnl,下載地址http://www.infradead.org/~tgr/libnl/,在這里我所下載的版本是libnl-1.1.4.tar.gz 下載地址http://www.infradead.org/~tgr/libnl/files/libnl-1.1.4.tar.gz 將下載到的文件拷貝到WiFi_AP,並解壓
4、進入WiFi_AP目錄,執行命令git clone git://w1.fi/srv/git/hostap.git 下載最新的hostapd
在線克隆的版本可能會比較高,有時會出現一些問題,所以手動下載hostap1.0,編譯通過。
5、下載dnsmasq,http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.75.tar.gz ,將下載到的文件拷貝到WiFi_AP,並解壓
6、前期准備工作到此完成,接下對以上4個工具包進行配置及交叉編譯才能在開發板上運行
二、編譯OpenSSL
1、進入openssl 目錄:cd WiFi_AP/openssl-1.0.2l
2、配置openssl:./config no-asm shared --prefix=$(pwd)/__install
no-asm: 是在交叉編譯過程中不使用匯編代碼代碼加速編譯過程,原因是它的匯編代碼是對arm格式不支持的。
shared :生成動態連接庫。
--prefix :指定make install后生成目錄的路徑,不修改此項則默認為OPENSSLDIR目錄(/usr/local/ssl)。
3、修改Makefile:
(1)修改編譯工具CC=/usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-gcc交叉編譯工具鏈路徑
(2)刪除 CFLAG= 中的-m64
(3)將AR= ar $(ARFLAGS) r改為AR= /usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-ar $(ARFLAGS) r
(4)將RANLIB= /usr/bin/ranlib改為RANLIB= /usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-ranlib
(5)將NM= nm改為NM= /usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-nm
(6)執行make命令
(7)make命令執行完畢后執行make install命令
三、編譯libnl
1、進入libnl目錄:WiFi_AP/cd libnl-1.1.4
2、配置libnl:./configure --prefix=$(pwd)/__install --enable-shared --enable-static
./configure CC=/home/wien/work/GCC_ARM/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc --prefix=$(pwd)/__install --enable-shared --enable-static --host=CC=/home/wien/work/GCC_ARM/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi
3、執行命令:make CC=/usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-gcc 進行交叉編譯
4、執行命令:make CC=/usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-gcc install 進行安裝
四、交叉編譯hostapd 無線網卡作為路由器,工作於AP模式
1、進入hostapd目錄:cd WiFi_AP/hostap/hostapd
2、采用默認配置,執行命令:cp defconfig .config
3、啟用CONFIG_DRIVER_NL80211=y
4、修改Makefile,
(1)將
ifndef CC
CC=gcc
endif
改為
ifndef CC
CC=/usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-gcc
endif
(2)
在Makefile開始添加
CFLAGS += -I../../libnl-1.1.4/__install/include/
CFLAGS += -I../../openssl-1.0.2l/__install/include/
LIBS += -L../../libnl-1.1.4/__install/lib/
LIBS += -L../../openssl-1.0.2l/__install/lib/
5、執行make命令:make CC=/usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-gcc
可采用同樣的方法修改編譯wpa_supplicant 0.7.3 無線網卡連接其他設備,工作於STA模式
如果只想WiFi模塊工作與AP模式,即熱點模式,則不用編譯。
五、交叉編譯dnsmasq
1、進入dnsmasq 目錄:cd WiFi_AP/dnsmasq-2.75
2、修改Makefile:
(1)在Makefile首行添加CC=/usr/local/gcc-arm/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-gcc
(2)設置安裝目錄PREFIX = /home/wien/work/Vstar/Wifi/dnsmasq-2.75/__install
3、執行make
4、編譯完成后,執行make install 安裝
六、至此所有工具均全部編譯完成,接下來腳編譯得到的可執行文件及相關配置拷貝到開發板對應目錄
//需要把編譯成功后產生的相關文件復制到根文件系統,再打包燒錄
mkdir -p /system/vendor/modules
cp bcmdhd.ko /system/vendor/modules
cp dnsmasq.conf hostapd.conf hostapd.accept hostapd.deny /etc
cp hostapd hostapd_cli dnsmasq /sbin
cp /dragonboard/bin/fw_bcm40181a2.bin /system/vendor/modules/
cp /dragonboard/bin/nvram_ap6210.txt /system/vendor/modules/
cp /dragonboard/bin/config.txt /system/vendor/modules/
cp wifisetap.sh /
mkdir /var/lib/misc
cp dnsmasq.leases(創建一個空文件即可) /var/lib/misc
七、當wpa_supplicant編譯完成之后, 會產生wpa_supplicant 、wpa_cli 、wpa_passphrase三個文件,其中wpa_supplicant 與 wpa_cli 是服務器與客戶端關系,后台運行wpa_supplicant,使用 wpa_cli來搜索、設置、和連接網絡。
Wpa_supplicant作用:
1、讀取配置文件
2、初始化配置參數,驅動函數
3、讓驅動scan當前所有的bssid
4、檢查掃描的參數是否和用戶設置的想否
5、如果相符,通知驅動進行權限 認證操作
6、連上AP
wpa_cli 主要用於配置WiFi。
命令:
1. 開機加載bcmdhd.ko 即加載WiFi模塊
2. ifconfig wlan0 up 開啟WiFi,
3. iwlist wlan0 scanning | grep ESSID 掃描附近熱點,參數用於只顯示熱點名
4. wpa_supplicant -B -c/etc/wpa_supplicant.conf -iwlan0 使用wpa_supplicant 讀取 *.conf中事先設置好的熱點信息,並連接。
5. udhcpc -b -i wlan0 給STA模式的WiFi模塊自動分配IP,否則不能ping百度。
6. ping www.baidu.com
目前僅使用wpa_supplicant 自己寫配置文件 .conf 其中預先寫死的WiFi名和密碼,太局限性,wpa_cli 工具還沒使用,另外還有其他 WiFi_tool 更強大,等后續學習使用。
命令介紹:
iw工具:是iwconfig的替代者
(1)可用於 open, WEP兩種"認證/加密"的模式的使用
// 列出WIFI網卡的性能
iw list
//啟動wifi模塊
ifconfig wlan0 up
// 掃描WIFI AP
iw dev wlan0 scan
// 連接到WIFI AP:xxx (open模式) (沒有密碼的,開放式wifi的連接)
iw wlan0 connect xxx
// 連接到WIFI AP:xxx (WEP模式) 后面的xxxxx表示密碼
iw wlan0 connect xxx keys d:0:xxxxxx
d: default, 0: 第0個密碼
手動配置wifi熱點的ip
ifconfig wlan0 192.168.1.22
ping 一下百度,看是否可以連通網絡(前提,已經設置了支持外網)
ping www.baidu.com
斷開熱點的連接:
iw wlan0 disconnect
killall hostapd
killall dnsmasq
rmmod /system/vendor/modules/bcmdhd.ko
insmod /system/vendor/modules/bcmdhd.ko op_mode=2
ifconfig wlan0 down
ifconfig wlan0 up
hostapd /etc/hostapd.conf -B
ifconfig wlan0 192.168.1.1
dnsmasq
iwlist wlan0 scanning
編譯成功之后應有一下庫文件
hostapd 共享庫
ld-2.11.1.so* libgcc_s.so.1* librt.so.1@
ld-linux.so.3@ libm-2.11.1.so*
libc-2.11.1.so* libm.so.6@
libc.so.6@ libpthread-2.11.1.so*
libdl-2.11.1.so* libpthread.so.0@
libdl.so.2@ librt-2.11.1.so*
dnsmasq 共享庫
ld-2.11.1.so* libc.so.6@ libnss_files.so.2*
ld-linux.so.3@ libgcc_s.so.1*
libc-2.11.1.so* libnss_files-2.11.1.so*
