|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本文档介绍 SDIO WIFI 在 6818 开发板,QtE 的移植方法,请注意:移植过程中的部分库和工具,在源码或者镜像中可能已经存在,大家可以使用自己生成的覆盖即可。提供的文件; ^ A* y' R0 A2 T4 T
如下图所示,分别为三个源码压缩包、编译好的库位于 lib 文件夹、wpa_supplicant 工具位于 sbin 文件夹、6620_launcher 和脚本 make_mt6620.sh。
* M8 V! h8 l6 B![]()
7 y8 Z+ b* R" b& ]/ m这里我们所使用的驱动模块对应在 Android 源码中的device/nexell/s5p6818_drone/mt6620_6818/目录下,用户只要在内核将 WiFi 设置为模块方式(M),然后编译 Android 源码之后可以7 O# B" H5 e3 \3 Y0 ^: O+ g/ d
在该目录找到可以使用的驱动模块。同样所需驱动我们在 wpa_driver 文件夹直接提供,以方便使用。
5 P- K$ _0 i8 O% B6 q' N1 6620_launcher2 Q1 X" n, o9 `7 w6 a
6620_launcher 工具是作为后台的一个服务程序运行,该服务会配置串口的工作参数,下载固件补丁到 MT6620 中,它位于开发板的“/usr/bin/”目录下,在系统中内置,用户可以直接覆盖。
2 C8 t) _7 O$ l7 _. `2 g$ G2 移植 wpa_supplicant
; }. y6 h) ^% {0 q0 _% p在进行编译之前要先修改编译器为 4.3.2 版本,如何设置编译器参见手册 7.1 章节“Qt/E4.7.1 编译器的安装”。另外为了避免使用环境变量设置编译器而可能出现的问题,文档中大部分编译是使用编译器的绝对路径,用户也应先找到自己编译器的绝对路径待用。下图是本次编译使用的编译器以及编译器压缩包。
: e! f* A) t: l1 p4 z" [1 R![]()
' R7 p- Y. [7 |' N1 b3 Q由上图可知该编译器的绝对路径为“/usr/local/ARM/4.3.2/bin/ arm-none-linux-gnueabi-gcc”。; `* J9 r0 w: c) ^- h/ s6 u
用户需要将提供的源码压缩包拷贝到 Ubuntu 的工作目录,分别解压 ,如下图所示。4 z% b0 l% V) |4 ]4 B3 J
![]()
! Y! n3 ?. @. f# F0 _2.1 移植 OpenSSL9 T2 `2 ?, k# L9 i+ a7 l$ }; h
首先进入目录 openssl-1.1.0g,内容如下图所示。
8 i+ v: ?' [: [$ R![]()
: K8 j5 P$ G, R, H! W执行下面指令,做相应配置。
" q6 p9 C& M( A2 o) M7 d# }* S/ k6 m6 ]./config no-asm shared --prefix=$(pwd)/__install0 p6 U7 Z9 `/ d! q4 u3 ]- R
执行完成后如下图所示。 ^# i% i/ }$ M8 S, H7 j
![]()
0 x0 C K: G& ]0 H$ ~3 k, y1 Gno-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是不支持 arm 格式。( W3 {( `0 v% V$ m9 o: E. d" Y& [
shared :生成动态连接库。--prefix :指定 make install 后生成目录的路径,不修改此项则默认为 OPENSSLDIR 目录(/usr/local/ssl)。6 H$ D4 q2 q) M+ A. ^* A
使用命令“vim Makefile”打开 Makefile,搜索 CFLAG,定位到下图中所示位置。% f! H* p+ O3 [/ R2 Y
![]()
) i! }6 T; U, {1 h; C6 x# x删除上图中红框中的“-m64”,完成后 CFLAG 应如下图所示。0 n' B+ D2 s6 ~- |' @
. v" u6 e5 j% c
执行以下命令,编译 OpenSSL 库,注意这里使用的是交叉编译器的绝对路径。* ^. \1 v2 q, e' ?) j. ?& c
make CROSS_COMPILE=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-4 G* |3 ~; K" b- I( w8 @
编译完成后如下图所示。8 o9 D. y! M" U
2 X1 o8 Y/ p9 Q0 _" t. F5 L4 g
执行下面命令,将编译好的库文件拷贝到第一步指定的目录; c& S3 k4 F5 M; M; w8 t
make install
/ L# t3 g2 b. h3 C: O! ]如下图所示在当前目录下的__install 目录下生成了头文件和库文件:% L3 i' D5 w( }7 U4 f, h
7 j2 j1 u4 c" K' x
include 下文件在编译程序的时候需要指定该 include 的路径。而 lib 下在程序运行时会用到,需要将 lib 下所有文件包括文件夹拷贝到开发板/lib 文件夹中。; O( U3 Q+ t* K( e
2.2 移植 libnl3 S3 x+ N- ?3 ^( n# }
libnl 是为了方便应用程序使用 netlink 接口而开发的一个库。这个库为原始 netlink 消息传递以及不同的 netlink family 专用接口提供了一个统一的接口。进入目录“libnl-1.1.4/”,如下图所示。
% Q/ K8 I# l! V7 Y; d6 y 9 c" l' X1 Z6 R9 z+ f: _
执行下面的指令,配置编译架构。' l' y, W0 b! ^8 K. Z
./configure --prefix=$(pwd)/__install --enable-shared --enable-static% i* S2 D7 ~) _, p
其中--prefix=$(pwd)/__install 指定了编译出来的库存放的路径,一般将其放在当前目录下的__install 目录下,执行结果如下图所示。
$ J1 x5 P. P! `6 y % q5 ]0 j" H# B3 M" C) V1 ~4 I
执行下面的命令,编译库+ p0 A! I$ p' a
make CC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc6 \, O: |1 Q- \: K* I
完成后如下图所示。, l- b% g( C" P; ~& ^6 s+ Q! A
/ v8 ^3 q$ ~" S& v% I2 {9 t! h
使用命令“make install”, 将编译好的库文件拷贝到指定目录。在当前目录下的__install目录下生成了头文件和库文件 ,如下图所示。0 Q3 j: K1 C. p" ^3 w5 p& X
/ e P- O$ }+ C A! I6 V$ ~
include 目录下文件在编译程序的时候会用到,而 lib 下在程序运行时会用到。故在移植hostapd 的时候需要指定 include 的路径,需要将 lib 目录下所有文件包括文件夹拷贝到开发板中的/lib 文件夹中。* W5 C; |/ A( T" `
2.3 移植 wpa_supplicant& v3 r0 z4 O. {4 s- N
wpa_supplicant 是作为 hostap 的一部分,它位于 hostap 目录中。使用命令“cdhostap/wpa_supplicant/”进入 wpa_supplicant 目录,如下图所示。
$ o: n( a7 E' l4 R- T: ~![]()
5 Q& b" m* C' ?3 i/ {) o使用命令“cp defconfig .config”复制一份默认的配置文件。然后使用命令“vimMakefile”修改 Makefile,如下图所示。
+ R0 r0 l4 i: }$ ?; I ; T w: f0 o {7 J U }$ ]. C
将
! d+ I$ y U* D6 vifndef CC
- }7 L* x4 f, Q6 i1 `CC=gcc
5 k0 N5 z+ h! }; W+ \0 O% c+ Cendif
0 `* W! g5 m9 G5 s& [' ~# y/ o修改为3 v5 p$ \3 E* m, [% `
CFLAGS += -I../../libnl-1.1.4/__install/include/, L) z% X d' X- W+ {
CFLAGS += -I../../openssl-1.1.0g/__install/include/
% q% D" D7 S8 Y# ^LIBS += -L../../libnl-1.1.4/__install/lib/
2 E9 k! I) M2 u$ FLIBS += -L../../openssl-1.1.0g/__install/lib/+ N, A |% [& o1 `! \
#ifndef CC$ e7 r$ N" V; i# K0 _
CC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc8 m# F$ e2 c) p9 h7 J5 ^
#endif0 E! A/ k) Z) Q& o7 A+ N
注意,CC 路径为自己环境中的交叉工具链路径。 |" X( k" g+ U1 s
修改完成后 Makefile 如下图所示。
5 w6 T1 Y7 [5 U5 |2 a* v: y' q5 T ) _6 z6 J8 z9 R7 p3 a
接下来使用命令“make”编译,结果如下图所示。
0 P% t( L" Q4 m& x 3 e) O) t0 n& Y7 R, P ~9 z
此时在当前目录下出现了“wpa_supplicant”工具,如下图所示。4 R2 L' s+ C. G( q- l9 d
![]()
1 y3 F- i1 `' s) }5 ]+ C将编译好的 wpa_supplicant 工具拷贝到开发板上的“/usr/sbin”目录即可。5 L. Q, K! T- g, n2 z
3 直接拷贝/ B) U7 l. C; D# l. x. G. _" @
跳过编译步骤,可以直接拷贝压缩包中 lib 文件夹中的库文件到开发板的/lib 目录,以及复制 sbin 文件夹中的文件到开发板的/usr/sbin 目录,复制 6620_launcher 到开发板的/usr/bin 目录下,复制 wpa_driver 中的所有文件到/lib/modules/mt6620/目录,以及复制脚本 make_mt6620.sh 到开发板的任意目录,然后进行下一章节的操作。
) y8 v' }3 X3 T. o: R! N' V( D4 开发板连接 WiFi
% W+ l$ f/ Z) ] H6 n5 G2 `/ n在开发板执行下面的指令,更新 WiFi 开机启动脚本。' C" h0 u( j# V+ N$ F0 R. _$ a
cat << EOF > /etc/init.d/mt6620+ w) l+ {* l# G) [
#!/bin/sh
5 K) E4 b; T) N0 R' ^#support MT6620 WIFI Module: r+ Q, n2 K5 l9 [' R7 N
mknod /dev/stpwmt c 190 0
( t: j. P( w! S' ?' ?mknod /dev/stpgps c 191 0' ?7 b/ X3 v$ E& Z! W: Q
mknod /dev/fm c 193 0
% b, S! d3 h9 @, ^; Nmknod /dev/wmtWifi c 194 0
& i2 C. a7 n; ^ _; Q) ]insmod /lib/modules/mt6620/mtk_hif_sdio.ko
" q: ~8 S/ v3 u, e0 a# j3 Pinsmod /lib/modules/mt6620/mtk_stp_wmt.ko8 I! J, H) K5 q l
insmod /lib/modules/mt6620/mtk_stp_uart.ko
, _6 [1 ], M( ~insmod /lib/modules/mt6620/mtk_stp_gps.ko; t: T4 n! V) s
#insmod /lib/modules/mt6620/hci_stp.ko
" U2 E8 m' y! ^: G! W7 ~; P3 G5 H4 [# J#insmod /lib/modules/mt6620/mt6620_fm_drv.ko
; u/ n' H8 P( R, U) W# R% a#insmod /lib/modules/mt6620/mtk_fm_priv.ko
+ m; k, u1 @0 H9 `. Cinsmod /lib/modules/mt6620/mtk_wmt_wifi.ko WIFI_major=1943 p" x J4 [& G$ X3 Q" V! M6 O
insmod /lib/modules/mt6620/wlan_mt6620.ko' R2 ^; _) R9 o! n4 |! X
chmod 0666 /dev/stpwmt
5 Q" H2 E1 d8 achmod 0666 /dev/stpgps2 C V, g6 u G' y7 D5 v c7 N
chmod 0666 /dev/fm
: S5 M% O" d6 `2 ~8 Ychmod 0666 /dev/wmtWifi
' |% z" r6 d+ z# ochmod 0666 /dev/gps
: n/ O6 |. c" ?) o8 t, Wchmod 0660 /dev/ttySAC2
( ~4 s3 G: v& ?% f8 k$ X b/usr/bin/6620_launcher -m 1 -b 921600 -n /etc/firmware/mt6620_patch_hdr.bin -d /dev/ttySAC2 &
# H0 h& r7 i y, j, m0 `- ?% ~sleep 43 R6 K! ~6 Q$ J7 Z: h! ^
echo 1 > /dev/wmtWifi. G0 |3 D1 n* ^
wpa_supplicant -iwlan0 -Dnl80211 -c/etc/wpa_supplicant.conf &1 F7 A8 @; f' V) p
sleep 3
; y& Z I1 ~( |& ]3 tudhcpc -i wlan0 >/var/udhcpc_log &( Q% r6 J% @ J3 W% V
EOF
k- F- U! o7 U9 ?" ?( s' a: I粘贴到开发板然后按回车,如下图所示 。- r2 k/ x! g% w, N# O
![]()
# e2 P1 K. [% x+ ~ M或者在开发板上执行我们提供的“make_mt6620.sh”,起到同样效果。" T6 K+ S- F" w
然后执行以下指令3 N/ E; l9 O2 N1 H/ v" C' Q
wpa_passphrase XXX "YYY" > /etc/wpa_supplicant.conf& E B# j3 i; z9 p6 I7 r6 S
其中 XXX 代表 WiF 网络名称, YYY 代表 WPA-PSK 或者 WPA2-PSK 加密的密码。然后执行命令“ ./etc/init.d/mt6620 ”即可连接到 WiFi 网络,配置时间大约 30 秒左右。
1 \# ?+ X" T ^; J Y' ` - p- F( k: H+ p+ k. y
可以看到 wlan0 成功分配到 IP 地址,关闭了 eth0,执行命令“ping www.baidu.com -c 4”,可以看到可以通过 WiFi 连通互联网,如下图所示。
8 U& C) Q. J S$ H# Z![]()
* H6 U% A) @ U5 X1 M
) J6 m* g+ _5 u- e* B![]()
: W( f' T. S3 ^& k( I) ^ |
|