|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本文档介绍 SDIO WIFI 在 6818 开发板,QtE 的移植方法,请注意:移植过程中的部分库和工具,在源码或者镜像中可能已经存在,大家可以使用自己生成的覆盖即可。提供的文件
6 n, N' m0 q1 |如下图所示,分别为三个源码压缩包、编译好的库位于 lib 文件夹、wpa_supplicant 工具位于 sbin 文件夹、6620_launcher 和脚本 make_mt6620.sh。# d' X, w/ o) q$ i: u* E! l- ]
& r7 J/ {$ \7 u$ y7 d
这里我们所使用的驱动模块对应在 Android 源码中的device/nexell/s5p6818_drone/mt6620_6818/目录下,用户只要在内核将 WiFi 设置为模块方式(M),然后编译 Android 源码之后可以
8 C* f8 B1 `# B, Q在该目录找到可以使用的驱动模块。同样所需驱动我们在 wpa_driver 文件夹直接提供,以方便使用。
' m9 D- X% K |9 N, }1 E' {1 6620_launcher
0 h( p4 d6 E3 m. A" R6620_launcher 工具是作为后台的一个服务程序运行,该服务会配置串口的工作参数,下载固件补丁到 MT6620 中,它位于开发板的“/usr/bin/”目录下,在系统中内置,用户可以直接覆盖。 i- C3 w- y8 i# E- T
2 移植 wpa_supplicant( V5 Q' y2 ~6 L. v+ ^+ Y3 x' W" j
在进行编译之前要先修改编译器为 4.3.2 版本,如何设置编译器参见手册 7.1 章节“Qt/E4.7.1 编译器的安装”。另外为了避免使用环境变量设置编译器而可能出现的问题,文档中大部分编译是使用编译器的绝对路径,用户也应先找到自己编译器的绝对路径待用。下图是本次编译使用的编译器以及编译器压缩包。- X2 `9 n" p' N5 z
![]()
/ g" x0 t% L' U6 P由上图可知该编译器的绝对路径为“/usr/local/ARM/4.3.2/bin/ arm-none-linux-gnueabi-gcc”。
& q: ]- \% ^# F# F% L1 m用户需要将提供的源码压缩包拷贝到 Ubuntu 的工作目录,分别解压 ,如下图所示。
, w& I% c0 G. B$ ^" L![]()
4 I" [$ w' B: I2 G' P2.1 移植 OpenSSL
" a2 e' p( [7 v `首先进入目录 openssl-1.1.0g,内容如下图所示。8 I3 B, ^, p* ?/ u. q- u- X! _
![]()
z/ r( I$ Y8 p5 G执行下面指令,做相应配置。7 t6 M6 ^9 T+ g/ W& a+ U* D& \' j
./config no-asm shared --prefix=$(pwd)/__install
: P' j; o1 U& b% M. J; {* Q3 s执行完成后如下图所示。
- [ G: f3 q% K. K& S3 o7 G: B 9 y! q+ C9 x! g
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是不支持 arm 格式。 b) N9 F/ g% O2 k$ P
shared :生成动态连接库。--prefix :指定 make install 后生成目录的路径,不修改此项则默认为 OPENSSLDIR 目录(/usr/local/ssl)。, ?. T- v" E: }' H3 n; `
使用命令“vim Makefile”打开 Makefile,搜索 CFLAG,定位到下图中所示位置。
6 L# H5 i8 [% [) a" }0 C: A y$ z+ s* t1 h
删除上图中红框中的“-m64”,完成后 CFLAG 应如下图所示。8 d! I" H7 O. z0 ~0 p0 `' S& J
![]()
! I9 Q. K0 E) Z! \" A+ @7 m执行以下命令,编译 OpenSSL 库,注意这里使用的是交叉编译器的绝对路径。
) d9 o5 C n, _: J. _make CROSS_COMPILE=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-
% S) D$ v8 J! h4 c4 m9 C编译完成后如下图所示。
- H( n# p$ F7 m; v; L) }4 c ' f) m/ a$ i' C3 r- H
执行下面命令,将编译好的库文件拷贝到第一步指定的目录
5 }6 d: ?' X4 ?9 ~make install
. C, J1 v1 L2 {1 D! k如下图所示在当前目录下的__install 目录下生成了头文件和库文件:
% s! C5 `* [8 c3 q" e 8 d8 S& W3 A% Q8 H& d- b. n
include 下文件在编译程序的时候需要指定该 include 的路径。而 lib 下在程序运行时会用到,需要将 lib 下所有文件包括文件夹拷贝到开发板/lib 文件夹中。
! |1 m) O) h% v2.2 移植 libnl
: d! ?% d, {4 _) j* {5 g qlibnl 是为了方便应用程序使用 netlink 接口而开发的一个库。这个库为原始 netlink 消息传递以及不同的 netlink family 专用接口提供了一个统一的接口。进入目录“libnl-1.1.4/”,如下图所示。" ^+ s, l9 H; C0 |( J6 Y+ P# f6 k
![]()
3 t- D2 j( l6 ?+ b# K! B执行下面的指令,配置编译架构。4 R& x2 l' s0 v1 u
./configure --prefix=$(pwd)/__install --enable-shared --enable-static
; O& V" ~% e2 t6 X3 w5 o其中--prefix=$(pwd)/__install 指定了编译出来的库存放的路径,一般将其放在当前目录下的__install 目录下,执行结果如下图所示。4 d4 V* z% O9 Q( P, Z# G
![]()
- q% b; ^ l& F* X3 A6 x$ x执行下面的命令,编译库4 N" a) {& b* R( P0 v6 @
make CC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc+ c( \% Q# e3 ]2 I% s7 n
完成后如下图所示。0 x+ L0 d# q6 p# Z
" y6 T/ l$ j1 N* U8 J" t
使用命令“make install”, 将编译好的库文件拷贝到指定目录。在当前目录下的__install目录下生成了头文件和库文件 ,如下图所示。5 _( Q1 h6 Q, X5 L9 e# M( w
& o9 ~9 r8 K; i
include 目录下文件在编译程序的时候会用到,而 lib 下在程序运行时会用到。故在移植hostapd 的时候需要指定 include 的路径,需要将 lib 目录下所有文件包括文件夹拷贝到开发板中的/lib 文件夹中。3 u4 l; ~- Q B9 `. y
2.3 移植 wpa_supplicant T. l [. x$ b
wpa_supplicant 是作为 hostap 的一部分,它位于 hostap 目录中。使用命令“cdhostap/wpa_supplicant/”进入 wpa_supplicant 目录,如下图所示。
) s2 B) K# I# F' h1 B; d$ {![]()
7 W1 U2 @5 D9 ~/ G使用命令“cp defconfig .config”复制一份默认的配置文件。然后使用命令“vimMakefile”修改 Makefile,如下图所示。4 o& k) C9 }2 v/ P
! c; K- ^! M" U
将* {, A3 _+ ^4 }7 A
ifndef CC: Q+ _! f3 |/ P8 ~
CC=gcc
- \* U4 W0 q l9 T; v1 v$ nendif
: G+ w+ U" e3 q3 ^修改为
8 h/ [: \9 r/ i! v4 U- g7 oCFLAGS += -I../../libnl-1.1.4/__install/include/
$ J4 n3 `/ F" x: E9 H D7 DCFLAGS += -I../../openssl-1.1.0g/__install/include/5 o$ e4 \7 H1 _( {/ O; r. Q0 H
LIBS += -L../../libnl-1.1.4/__install/lib/, E- E2 _0 H- Y: V0 X
LIBS += -L../../openssl-1.1.0g/__install/lib/0 Q+ S" s9 V- S* k$ ~9 i
#ifndef CC
8 _( } R8 J% n* x, m$ i' I% cCC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: Y- k7 D7 X5 D, o" w9 `/ L
#endif! v7 j, K4 I; R& y& y
注意,CC 路径为自己环境中的交叉工具链路径。
3 c' N' N4 |% s9 L' x2 E- [修改完成后 Makefile 如下图所示。
/ [1 C3 I! n7 ~5 {8 a: \/ C$ t ! i' O9 W1 `0 b# z n; E
接下来使用命令“make”编译,结果如下图所示。
6 {$ U) k5 A0 i$ |![]()
. M) R/ N- K) d' g9 V" s" G此时在当前目录下出现了“wpa_supplicant”工具,如下图所示。
$ s! E. `1 k& D5 o( Z 7 W8 i/ s7 a4 S+ v9 u
将编译好的 wpa_supplicant 工具拷贝到开发板上的“/usr/sbin”目录即可。, `4 s2 m& Y! W6 o1 q
3 直接拷贝* b1 X1 D4 u; I- `% x p
跳过编译步骤,可以直接拷贝压缩包中 lib 文件夹中的库文件到开发板的/lib 目录,以及复制 sbin 文件夹中的文件到开发板的/usr/sbin 目录,复制 6620_launcher 到开发板的/usr/bin 目录下,复制 wpa_driver 中的所有文件到/lib/modules/mt6620/目录,以及复制脚本 make_mt6620.sh 到开发板的任意目录,然后进行下一章节的操作。
9 D- f" I4 R4 x( s4 开发板连接 WiFi6 f; B f* [8 ~+ N' q& T& Y7 J
在开发板执行下面的指令,更新 WiFi 开机启动脚本。
. H' A" I8 a( g; O# E) ^cat << EOF > /etc/init.d/mt66203 z1 O1 h) W5 _/ Z4 G
#!/bin/sh6 P/ r. e1 O! g& t
#support MT6620 WIFI Module
5 m9 d6 M: s2 l6 h/ Emknod /dev/stpwmt c 190 0
6 H ~+ F( I6 I: w0 E# d- hmknod /dev/stpgps c 191 0
7 |; h. J+ L/ Z0 j1 u. i, y" Lmknod /dev/fm c 193 0& K2 d7 ~3 f% E+ u
mknod /dev/wmtWifi c 194 08 z) z# ^6 h& m: u3 [! B1 c
insmod /lib/modules/mt6620/mtk_hif_sdio.ko8 {% a) y" _; e M5 I
insmod /lib/modules/mt6620/mtk_stp_wmt.ko' W- C h* Y) ~. v% B0 _
insmod /lib/modules/mt6620/mtk_stp_uart.ko
$ v* ^& o: i. I7 h2 c4 V- winsmod /lib/modules/mt6620/mtk_stp_gps.ko
% s$ t8 Z5 o) v#insmod /lib/modules/mt6620/hci_stp.ko
$ {( Z& a' j. s#insmod /lib/modules/mt6620/mt6620_fm_drv.ko6 @5 I# Y7 h. g o9 M- {
#insmod /lib/modules/mt6620/mtk_fm_priv.ko
6 V3 C7 F V+ F) tinsmod /lib/modules/mt6620/mtk_wmt_wifi.ko WIFI_major=194
1 Q. X$ {* O9 t: p0 Z5 S e cinsmod /lib/modules/mt6620/wlan_mt6620.ko0 E7 Z2 D8 C6 k: _8 u1 e
chmod 0666 /dev/stpwmt
% L( {- _9 P2 i1 u7 R3 k" Kchmod 0666 /dev/stpgps
. c& B3 t/ a1 j& l2 }chmod 0666 /dev/fm/ r7 v x4 ~( q$ {
chmod 0666 /dev/wmtWifi
% V( n, `* H8 }% C# H' `6 ~chmod 0666 /dev/gps8 E! N* N7 T7 L4 @2 K9 e; b
chmod 0660 /dev/ttySAC2
" _9 \+ @2 _' F7 J- q( Y/usr/bin/6620_launcher -m 1 -b 921600 -n /etc/firmware/mt6620_patch_hdr.bin -d /dev/ttySAC2 &
7 P# @# |2 [, W' T/ o! T i8 N+ Ysleep 46 y2 T$ b7 [# M$ U# O. D, G
echo 1 > /dev/wmtWifi9 S; h* Y9 [9 K$ O9 X, ]
wpa_supplicant -iwlan0 -Dnl80211 -c/etc/wpa_supplicant.conf &
2 `8 ?: x7 s2 e; c: ^# Psleep 3
6 u- f4 ~' y( X s4 Tudhcpc -i wlan0 >/var/udhcpc_log &
& A. q5 M2 C& ?1 y6 V9 sEOF
) I6 A9 `# G! i7 q粘贴到开发板然后按回车,如下图所示 。
6 W: D3 m+ `0 y) u/ ~ ' |2 U$ T: V) z+ ^! j. G
或者在开发板上执行我们提供的“make_mt6620.sh”,起到同样效果。% F2 l3 y2 D" p F9 b( C! Z. L) ?
然后执行以下指令, @9 Q9 P8 ?) l
wpa_passphrase XXX "YYY" > /etc/wpa_supplicant.conf7 B7 h. }0 v- Y. a5 @: B) N4 O0 a
其中 XXX 代表 WiF 网络名称, YYY 代表 WPA-PSK 或者 WPA2-PSK 加密的密码。然后执行命令“ ./etc/init.d/mt6620 ”即可连接到 WiFi 网络,配置时间大约 30 秒左右。3 e7 S) Y- _: v
- r0 y' p/ b: S( ?, y
可以看到 wlan0 成功分配到 IP 地址,关闭了 eth0,执行命令“ping www.baidu.com -c 4”,可以看到可以通过 WiFi 连通互联网,如下图所示。
( _% q! Y& Y$ i6 V2 T& I: G/ d ( k" b% K) ]% `7 d* z; G2 M
; M7 a! S9 a$ n9 ^5 J![]()
. ~( G# ?0 J i) v* x$ Q* I$ Q |
|