|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本文档介绍 SDIO WIFI 在 6818 开发板,QtE 的移植方法,请注意:移植过程中的部分库和工具,在源码或者镜像中可能已经存在,大家可以使用自己生成的覆盖即可。提供的文件
: n( K0 t" |6 t* G, @1 A% z如下图所示,分别为三个源码压缩包、编译好的库位于 lib 文件夹、wpa_supplicant 工具位于 sbin 文件夹、6620_launcher 和脚本 make_mt6620.sh。
) [. {) F) A) v( O, d![]()
9 d) P- Z! X' _这里我们所使用的驱动模块对应在 Android 源码中的device/nexell/s5p6818_drone/mt6620_6818/目录下,用户只要在内核将 WiFi 设置为模块方式(M),然后编译 Android 源码之后可以7 W: D2 G+ w# s/ A- M5 W
在该目录找到可以使用的驱动模块。同样所需驱动我们在 wpa_driver 文件夹直接提供,以方便使用。+ }5 O9 r. L1 N1 }
1 6620_launcher
, J0 Y7 O5 e* P/ ]9 O" m% M! P5 ~6620_launcher 工具是作为后台的一个服务程序运行,该服务会配置串口的工作参数,下载固件补丁到 MT6620 中,它位于开发板的“/usr/bin/”目录下,在系统中内置,用户可以直接覆盖。) O: _4 w7 a( Q- q7 E L
2 移植 wpa_supplicant; f6 f) Y, y6 E: n' v
在进行编译之前要先修改编译器为 4.3.2 版本,如何设置编译器参见手册 7.1 章节“Qt/E4.7.1 编译器的安装”。另外为了避免使用环境变量设置编译器而可能出现的问题,文档中大部分编译是使用编译器的绝对路径,用户也应先找到自己编译器的绝对路径待用。下图是本次编译使用的编译器以及编译器压缩包。/ ~" R, t/ v7 h* D+ d2 H
![]()
4 K$ a9 I. | @5 x. G$ _由上图可知该编译器的绝对路径为“/usr/local/ARM/4.3.2/bin/ arm-none-linux-gnueabi-gcc”。& ?+ M, t0 ^1 N8 z0 Y2 X, a* c
用户需要将提供的源码压缩包拷贝到 Ubuntu 的工作目录,分别解压 ,如下图所示。
. P2 e2 e2 b' q% N. R" e + P+ J$ _% f) y9 N+ C0 @
2.1 移植 OpenSSL
# Z' s) v$ E j+ D2 V1 z首先进入目录 openssl-1.1.0g,内容如下图所示。( ~" c) s3 G0 |' |) l* j/ f
![]()
6 D% `( _* w/ ]. {执行下面指令,做相应配置。4 n; j5 t1 M5 C% J- e# a/ E8 K
./config no-asm shared --prefix=$(pwd)/__install, b# G* ~2 r6 y7 `: I9 Q
执行完成后如下图所示。1 }# d/ R6 _8 U8 O; e" \
( r+ J& _) K4 \
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是不支持 arm 格式。1 r6 v( E' C, T1 f( I, d! U
shared :生成动态连接库。--prefix :指定 make install 后生成目录的路径,不修改此项则默认为 OPENSSLDIR 目录(/usr/local/ssl)。
# R% t( y2 g: k5 [4 S& o2 N0 s使用命令“vim Makefile”打开 Makefile,搜索 CFLAG,定位到下图中所示位置。! l: B j' N) z! O+ u; i
![]()
" O* f2 L2 C% w删除上图中红框中的“-m64”,完成后 CFLAG 应如下图所示。
6 M' e4 t- k# `1 C# W7 s![]()
( [0 _* ]2 Z2 G0 ^+ K, u- ^. P' g2 ^执行以下命令,编译 OpenSSL 库,注意这里使用的是交叉编译器的绝对路径。
/ k2 |( |; M D3 G& P' A( X- Fmake CROSS_COMPILE=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-' ]% a8 x$ H4 o7 o5 B5 T$ k) {/ D a
编译完成后如下图所示。" I& `5 s0 | h$ l/ R
; U9 M+ y8 ]. a0 `$ U* }9 }" B
执行下面命令,将编译好的库文件拷贝到第一步指定的目录+ ]& B+ ?( Y! l$ L9 j" J7 d' W) r
make install
k$ @" R# `' s, x0 y# @1 P如下图所示在当前目录下的__install 目录下生成了头文件和库文件:
) Z. l& K1 F) E; T$ m1 J. K! r 4 C8 Y, M4 q O0 q; Z# }
include 下文件在编译程序的时候需要指定该 include 的路径。而 lib 下在程序运行时会用到,需要将 lib 下所有文件包括文件夹拷贝到开发板/lib 文件夹中。
5 S- B8 \( @! c# [/ y' o2.2 移植 libnl
8 X5 ^! O: _) wlibnl 是为了方便应用程序使用 netlink 接口而开发的一个库。这个库为原始 netlink 消息传递以及不同的 netlink family 专用接口提供了一个统一的接口。进入目录“libnl-1.1.4/”,如下图所示。
/ Y9 ^- K! z* K8 `![]()
& P3 o7 s, z# i执行下面的指令,配置编译架构。# u( W) n' l+ l4 Q* J8 E
./configure --prefix=$(pwd)/__install --enable-shared --enable-static3 {0 h* a7 L8 R
其中--prefix=$(pwd)/__install 指定了编译出来的库存放的路径,一般将其放在当前目录下的__install 目录下,执行结果如下图所示。3 J7 f, `% {* C# A4 c
![]()
- f4 |5 G6 N/ \执行下面的命令,编译库; B+ b( f6 i+ |2 H& w( d
make CC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc7 t5 a. Q% `- `6 p
完成后如下图所示。; B$ r- `/ Z }' c+ k$ i
, }# |7 \/ u# }! \$ g* O: Y& q
使用命令“make install”, 将编译好的库文件拷贝到指定目录。在当前目录下的__install目录下生成了头文件和库文件 ,如下图所示。
3 s. g5 i0 E9 v- ^# E0 w$ X![]()
# G' K$ {% e+ b1 F1 u ]; J4 Qinclude 目录下文件在编译程序的时候会用到,而 lib 下在程序运行时会用到。故在移植hostapd 的时候需要指定 include 的路径,需要将 lib 目录下所有文件包括文件夹拷贝到开发板中的/lib 文件夹中。3 K. {$ q8 G5 p0 i) o x; |
2.3 移植 wpa_supplicant; l3 J4 T9 T9 _: C; }
wpa_supplicant 是作为 hostap 的一部分,它位于 hostap 目录中。使用命令“cdhostap/wpa_supplicant/”进入 wpa_supplicant 目录,如下图所示。% }0 g9 v' x5 D
![]()
5 e+ [' Q. [; F1 u使用命令“cp defconfig .config”复制一份默认的配置文件。然后使用命令“vimMakefile”修改 Makefile,如下图所示。
3 F# \2 |. N' u6 c* d1 `! ]$ m$ ?( |0 | 1 v* J6 z2 t( b" _
将
- x+ \7 e) H p+ Z5 Q/ bifndef CC* N" p, f, b$ A/ p6 s5 y0 y$ U8 c
CC=gcc
1 |8 x7 ?+ o2 E% p3 u5 i; D' nendif
$ `0 Q0 s0 ~; d j+ d修改为& d0 b2 l8 h' `* l3 a' J2 O
CFLAGS += -I../../libnl-1.1.4/__install/include/
) A; j/ S7 k# ^$ ` nCFLAGS += -I../../openssl-1.1.0g/__install/include/
c: {# {# {& a D SLIBS += -L../../libnl-1.1.4/__install/lib/2 @* ]& @6 K" l; v4 T, e4 ~
LIBS += -L../../openssl-1.1.0g/__install/lib/; w/ ^6 y* [$ i0 W* e: b
#ifndef CC
; B- M/ O+ g& i; I; G+ WCC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc s4 t* c6 f2 N5 X
#endif3 Y5 A! A9 A+ r. x; u* J( Q
注意,CC 路径为自己环境中的交叉工具链路径。
2 h4 C; Z6 C, f" v" o4 G/ S修改完成后 Makefile 如下图所示。
1 n$ p( x" |- Z% f, ?$ U 3 |* Y+ M) P0 Z5 D# {
接下来使用命令“make”编译,结果如下图所示。6 g' b/ D* D7 |/ s5 F& w# {
![]()
9 S- F3 k2 M0 \7 }1 F+ f$ t此时在当前目录下出现了“wpa_supplicant”工具,如下图所示。
- }; Q" G9 V. B+ V2 p N![]()
, O; r" A- T% B0 F' O+ b" D6 H将编译好的 wpa_supplicant 工具拷贝到开发板上的“/usr/sbin”目录即可。
3 O* g8 ^. ?, ?# q3 直接拷贝
) F8 |8 L3 [. ?& |跳过编译步骤,可以直接拷贝压缩包中 lib 文件夹中的库文件到开发板的/lib 目录,以及复制 sbin 文件夹中的文件到开发板的/usr/sbin 目录,复制 6620_launcher 到开发板的/usr/bin 目录下,复制 wpa_driver 中的所有文件到/lib/modules/mt6620/目录,以及复制脚本 make_mt6620.sh 到开发板的任意目录,然后进行下一章节的操作。
, _( x) G: ?0 {' a1 g5 a4 开发板连接 WiFi3 p/ H; i/ @6 P# u. N- k
在开发板执行下面的指令,更新 WiFi 开机启动脚本。
" k* R, O( _5 o1 n4 ecat << EOF > /etc/init.d/mt6620
1 Q5 `. z; c/ Z0 T$ G#!/bin/sh: `5 [ O+ b1 r: Y3 B% U6 q$ Q+ ~; L8 w
#support MT6620 WIFI Module
: F1 |% `- ~3 B9 [& d) s7 Gmknod /dev/stpwmt c 190 0- n% F: i4 ]( q N1 L! |
mknod /dev/stpgps c 191 02 f+ C, U5 |: b! B- _4 r+ M7 Q
mknod /dev/fm c 193 0
& z& Q I+ [) U$ |. wmknod /dev/wmtWifi c 194 0. E0 {+ e7 k+ W2 y7 T0 u4 X6 j
insmod /lib/modules/mt6620/mtk_hif_sdio.ko
2 n4 [% [" i8 Z+ b* r- xinsmod /lib/modules/mt6620/mtk_stp_wmt.ko
, f' c- t/ H) o- U Cinsmod /lib/modules/mt6620/mtk_stp_uart.ko; R0 F3 Y5 N9 _
insmod /lib/modules/mt6620/mtk_stp_gps.ko& J' \! J/ \; q" d
#insmod /lib/modules/mt6620/hci_stp.ko2 g/ S" m/ S! v, @$ I( S
#insmod /lib/modules/mt6620/mt6620_fm_drv.ko9 U ]! s& f9 d; r4 r; N @2 T, }. S; u
#insmod /lib/modules/mt6620/mtk_fm_priv.ko
& s5 T$ b8 E* c7 v' Z4 U. D$ ginsmod /lib/modules/mt6620/mtk_wmt_wifi.ko WIFI_major=194 V; F# ~0 F9 I7 ?3 k2 U
insmod /lib/modules/mt6620/wlan_mt6620.ko
2 b3 `2 r1 M9 j# {! echmod 0666 /dev/stpwmt8 i5 ]) Q+ S# b) D
chmod 0666 /dev/stpgps4 D. b2 o! N4 x
chmod 0666 /dev/fm8 ~5 v" U( M/ n/ X6 y
chmod 0666 /dev/wmtWifi; S( N; H/ t( r: x+ w
chmod 0666 /dev/gps
4 C" F) x' Y* v' jchmod 0660 /dev/ttySAC21 V. ]" E7 O b" K$ O+ [4 M0 y* }
/usr/bin/6620_launcher -m 1 -b 921600 -n /etc/firmware/mt6620_patch_hdr.bin -d /dev/ttySAC2 &
; ~- `% m0 }3 k7 h7 q1 c" qsleep 4/ Z' D4 P$ Q3 R" G9 A2 @& q
echo 1 > /dev/wmtWifi5 v$ f, }! ?, o' U+ k
wpa_supplicant -iwlan0 -Dnl80211 -c/etc/wpa_supplicant.conf &. t$ G/ A0 [% |1 p" @
sleep 3
! V- `" _% e `3 D* y/ z) |# U! Gudhcpc -i wlan0 >/var/udhcpc_log &
( ~8 ?/ `0 H3 ?EOF
2 r4 Z% A( }0 {粘贴到开发板然后按回车,如下图所示 。) {/ H- Q" A4 r2 J7 k
![]()
1 ]2 j# q3 L* R& W/ D或者在开发板上执行我们提供的“make_mt6620.sh”,起到同样效果。
# R( g: f$ ~- J+ P然后执行以下指令8 r# u& t2 v2 s9 l
wpa_passphrase XXX "YYY" > /etc/wpa_supplicant.conf
9 e8 E- H+ t- D9 l) s9 ^其中 XXX 代表 WiF 网络名称, YYY 代表 WPA-PSK 或者 WPA2-PSK 加密的密码。然后执行命令“ ./etc/init.d/mt6620 ”即可连接到 WiFi 网络,配置时间大约 30 秒左右。4 e2 N4 ?2 A0 {/ w0 k; M
3 _7 T% S- J2 u: X0 u/ O
可以看到 wlan0 成功分配到 IP 地址,关闭了 eth0,执行命令“ping www.baidu.com -c 4”,可以看到可以通过 WiFi 连通互联网,如下图所示。
/ ^. ~/ d% W ^! r! G. } 4 u3 X/ X! B$ ]# J8 |8 ` L$ O( b
0 L. g& ~1 N; k/ q9 \0 k4 | D6 N
![]()
! X' e7 w9 h, R' ]8 e1 m ]" V1 N |
|