本文檔介紹 SDIO WIFI 在 6818 開(kāi)發(fā)板,QtE 的移植方法,請(qǐng)注意:移植過(guò)程中的部分庫(kù)和工具,在源碼或者鏡像中可能已經(jīng)存在,大家可以使用自己生成的覆蓋即可。提供的文件 如下圖所示,分別為三個(gè)源碼壓縮包、編譯好的庫(kù)位于 lib 文件夾、wpa_supplicant 工具位于 sbin 文件夾、6620_launcher 和腳本 make_mt6620.sh。 ![]() 這里我們所使用的驅(qū)動(dòng)模塊對(duì)應(yīng)在 Android 源碼中的device/nexell/s5p6818_drone/mt6620_6818/目錄下,用戶(hù)只要在內(nèi)核將 WiFi 設(shè)置為模塊方式(M),然后編譯 Android 源碼之后可以 在該目錄找到可以使用的驅(qū)動(dòng)模塊。同樣所需驅(qū)動(dòng)我們?cè)?wpa_driver 文件夾直接提供,以方便使用。 1 6620_launcher 6620_launcher 工具是作為后臺(tái)的一個(gè)服務(wù)程序運(yùn)行,該服務(wù)會(huì)配置串口的工作參數(shù),下載固件補(bǔ)丁到 MT6620 中,它位于開(kāi)發(fā)板的“/usr/bin/”目錄下,在系統(tǒng)中內(nèi)置,用戶(hù)可以直接覆蓋。 2 移植 wpa_supplicant 在進(jìn)行編譯之前要先修改編譯器為 4.3.2 版本,如何設(shè)置編譯器參見(jiàn)手冊(cè) 7.1 章節(jié)“Qt/E4.7.1 編譯器的安裝”。另外為了避免使用環(huán)境變量設(shè)置編譯器而可能出現(xiàn)的問(wèn)題,文檔中大部分編譯是使用編譯器的絕對(duì)路徑,用戶(hù)也應(yīng)先找到自己編譯器的絕對(duì)路徑待用。下圖是本次編譯使用的編譯器以及編譯器壓縮包。 ![]() 由上圖可知該編譯器的絕對(duì)路徑為“/usr/local/arm/4.3.2/bin/ arm-none-linux-gnueabi-gcc”。 用戶(hù)需要將提供的源碼壓縮包拷貝到 Ubuntu 的工作目錄,分別解壓 ,如下圖所示。 ![]() 2.1 移植 OpenSSL 首先進(jìn)入目錄 openssl-1.1.0g,內(nèi)容如下圖所示。 ![]() 執(zhí)行下面指令,做相應(yīng)配置。 ./config no-asm shared --prefix=$(pwd)/__install 執(zhí)行完成后如下圖所示。 ![]() no-asm: 是在交叉編譯過(guò)程中不使用匯編代碼代碼加速編譯過(guò)程,原因是它的匯編代碼是不支持 arm 格式。 shared :生成動(dòng)態(tài)連接庫(kù)。--prefix :指定 make install 后生成目錄的路徑,不修改此項(xiàng)則默認(rèn)為 OPENSSLDIR 目錄(/usr/local/ssl)。 使用命令“vim Makefile”打開(kāi) Makefile,搜索 CFLAG,定位到下圖中所示位置。 ![]() 刪除上圖中紅框中的“-m64”,完成后 CFLAG 應(yīng)如下圖所示。 ![]() 執(zhí)行以下命令,編譯 OpenSSL 庫(kù),注意這里使用的是交叉編譯器的絕對(duì)路徑。 make CROSS_COMPILE=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi- 編譯完成后如下圖所示。 ![]() 執(zhí)行下面命令,將編譯好的庫(kù)文件拷貝到第一步指定的目錄 make install 如下圖所示在當(dāng)前目錄下的__install 目錄下生成了頭文件和庫(kù)文件: ![]() include 下文件在編譯程序的時(shí)候需要指定該 include 的路徑。而 lib 下在程序運(yùn)行時(shí)會(huì)用到,需要將 lib 下所有文件包括文件夾拷貝到開(kāi)發(fā)板/lib 文件夾中。 2.2 移植 libnl libnl 是為了方便應(yīng)用程序使用 netlink 接口而開(kāi)發(fā)的一個(gè)庫(kù)。這個(gè)庫(kù)為原始 netlink 消息傳遞以及不同的 netlink family 專(zhuān)用接口提供了一個(gè)統(tǒng)一的接口。進(jìn)入目錄“l(fā)ibnl-1.1.4/”,如下圖所示。 ![]() 執(zhí)行下面的指令,配置編譯架構(gòu)。 ./configure --prefix=$(pwd)/__install --enable-shared --enable-static 其中--prefix=$(pwd)/__install 指定了編譯出來(lái)的庫(kù)存放的路徑,一般將其放在當(dāng)前目錄下的__install 目錄下,執(zhí)行結(jié)果如下圖所示。 ![]() 執(zhí)行下面的命令,編譯庫(kù) make CC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc 完成后如下圖所示。 ![]() 使用命令“make install”, 將編譯好的庫(kù)文件拷貝到指定目錄。在當(dāng)前目錄下的__install目錄下生成了頭文件和庫(kù)文件 ,如下圖所示。 ![]() include 目錄下文件在編譯程序的時(shí)候會(huì)用到,而 lib 下在程序運(yùn)行時(shí)會(huì)用到。故在移植hostapd 的時(shí)候需要指定 include 的路徑,需要將 lib 目錄下所有文件包括文件夾拷貝到開(kāi)發(fā)板中的/lib 文件夾中。 2.3 移植 wpa_supplicant wpa_supplicant 是作為 hostap 的一部分,它位于 hostap 目錄中。使用命令“cdhostap/wpa_supplicant/”進(jìn)入 wpa_supplicant 目錄,如下圖所示。 ![]() 使用命令“cp defconfig .config”復(fù)制一份默認(rèn)的配置文件。然后使用命令“vimMakefile”修改 Makefile,如下圖所示。 ![]() 將 ifndef CC CC=gcc endif 修改為 CFLAGS += -I../../libnl-1.1.4/__install/include/ CFLAGS += -I../../openssl-1.1.0g/__install/include/ LIBS += -L../../libnl-1.1.4/__install/lib/ LIBS += -L../../openssl-1.1.0g/__install/lib/ #ifndef CC CC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc #endif 注意,CC 路徑為自己環(huán)境中的交叉工具鏈路徑。 修改完成后 Makefile 如下圖所示。 ![]() 接下來(lái)使用命令“make”編譯,結(jié)果如下圖所示。 ![]() 此時(shí)在當(dāng)前目錄下出現(xiàn)了“wpa_supplicant”工具,如下圖所示。 ![]() 將編譯好的 wpa_supplicant 工具拷貝到開(kāi)發(fā)板上的“/usr/sbin”目錄即可。 3 直接拷貝 跳過(guò)編譯步驟,可以直接拷貝壓縮包中 lib 文件夾中的庫(kù)文件到開(kāi)發(fā)板的/lib 目錄,以及復(fù)制 sbin 文件夾中的文件到開(kāi)發(fā)板的/usr/sbin 目錄,復(fù)制 6620_launcher 到開(kāi)發(fā)板的/usr/bin 目錄下,復(fù)制 wpa_driver 中的所有文件到/lib/modules/mt6620/目錄,以及復(fù)制腳本 make_mt6620.sh 到開(kāi)發(fā)板的任意目錄,然后進(jìn)行下一章節(jié)的操作。 4 開(kāi)發(fā)板連接 WiFi 在開(kāi)發(fā)板執(zhí)行下面的指令,更新 WiFi 開(kāi)機(jī)啟動(dòng)腳本。 cat << EOF > /etc/init.d/mt6620 #!/bin/sh #support MT6620 WIFI Module mknod /dev/stpwmt c 190 0 mknod /dev/stpgps c 191 0 mknod /dev/fm c 193 0 mknod /dev/wmtWifi c 194 0 insmod /lib/modules/mt6620/mtk_hif_sdio.ko insmod /lib/modules/mt6620/mtk_stp_wmt.ko insmod /lib/modules/mt6620/mtk_stp_uart.ko insmod /lib/modules/mt6620/mtk_stp_gps.ko #insmod /lib/modules/mt6620/hci_stp.ko #insmod /lib/modules/mt6620/mt6620_fm_drv.ko #insmod /lib/modules/mt6620/mtk_fm_priv.ko insmod /lib/modules/mt6620/mtk_wmt_wifi.ko WIFI_major=194 insmod /lib/modules/mt6620/wlan_mt6620.ko chmod 0666 /dev/stpwmt chmod 0666 /dev/stpgps chmod 0666 /dev/fm chmod 0666 /dev/wmtWifi chmod 0666 /dev/gps chmod 0660 /dev/ttySAC2 /usr/bin/6620_launcher -m 1 -b 921600 -n /etc/firmware/mt6620_patch_hdr.bin -d /dev/ttySAC2 & sleep 4 echo 1 > /dev/wmtWifi wpa_supplicant -iwlan0 -Dnl80211 -c/etc/wpa_supplicant.conf & sleep 3 udhcpc -i wlan0 >/var/udhcpc_log & EOF 粘貼到開(kāi)發(fā)板然后按回車(chē),如下圖所示 。 ![]() 或者在開(kāi)發(fā)板上執(zhí)行我們提供的“make_mt6620.sh”,起到同樣效果。 然后執(zhí)行以下指令 wpa_passphrase XXX "YYY" > /etc/wpa_supplicant.conf 其中 XXX 代表 WiF 網(wǎng)絡(luò)名稱(chēng), YYY 代表 WPA-PSK 或者 WPA2-PSK 加密的密碼。然后執(zhí)行命令“ ./etc/init.d/mt6620 ”即可連接到 WiFi 網(wǎng)絡(luò),配置時(shí)間大約 30 秒左右。 ![]() 可以看到 wlan0 成功分配到 IP 地址,關(guān)閉了 eth0,執(zhí)行命令“ping www.baidu.com -c 4”,可以看到可以通過(guò) WiFi 連通互聯(lián)網(wǎng),如下圖所示。 ![]() ![]() |