EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本篇,将进行OK3568-C开发板Linux系统开发需要用的软件交叉编译环境的配置。下面就介绍两种交叉编译环境的配置方法。
4 Y7 a* K3 A( r" T0 S& x01C/C++交叉编译环境编译 如果只是使用C/C++代码,则在自己的Ubuntu虚拟机中添加RK3568对应的交叉编译器(gcc/g++)即可。进行代码的交叉编译时可用使用如下方法,该配置方式简单便捷。 - |! |3 v- M6 b4 Y) J4 T
1. 下载aarch64类型的gcc 在Linaro官网中下载GCC交叉编译工具链,飞凌嵌入式OK3568-C开发板采用的是64位的Cortex-A55内核,需要使用aarch64-linux-gnu。 地址:>>https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/ ( T# p% E @7 p( |% M2 ]! J
![]()
7 g3 e" j$ }$ E0 h1 L* x5 j: m% S9 B" I: d8 U
$ [1 A( O! |6 D* K; C
我下载的是这个:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。 7 G9 l- p, ?: t G# B) {
然后解压: ( k7 z1 ~9 N( l. ^" w5 n7 a
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar解压结果如下:
( q, Z' R0 i0 B3 L* V / ?) z0 u4 h F2 @" H3 Z
- T, U+ _; y; o1 E- f' j' N) x8 T% E. H" K" _% z
$ U& A* B# d1 m解压完成之后,可以在其下的bin目录中看到aarch64编译器:
& Y6 n, I4 m0 c7 C* W![]()
; C$ C! G p u7 j' q- Q
# B' L* @( A6 F
3 t* z5 O! F5 L* @5 B9 H使用这里的gcc或g++,就能交叉编译C或C++程序了。
4 y" r$ W+ w/ V9 w$ e4 E( E* R/ @2. 交叉编译C/C++程序测试 写一个简易的hello word的C++测试程序main.cpp:
0 n9 I% _- I8 ^# h5 _% d$ F
! i: F! m3 _# ~- w* V/ l+ S6 r; F- I% N' s6 w9 a
; `+ H( A z# b7 g' g! P) r" }
) n& Z5 G! v* _ M) c
7 K, k4 D! L; U5 }5 ]% Q
! n4 N# ?( i7 @5 B- k#include <stdio.h>然后使用如下指令进行编译: ' V' C: Z3 A& |5 Y( w# w
1 n! x7 ^* W$ N4 A7 f
export PATH=/home/xxpcb/myTest/OK3568/gcc_aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin PATH
0 e, A- G, p) E- g) G- P/ t- Q" `' r, h! C第一句是临时添加环境变量,当然也可以添加到.bashrc中实现永久添加,由于每种开发板用到的编译工具链不太一样,我一般都使用这种临时添加的方式。 0 r4 m; @3 P7 T! A* n) h
第二句是使用aarch64-linux-gnu-g++来编译C++程序,编译结果如下,可用使用file指令查看编译出的程序的文件类型:
' F9 O# p/ A0 m![]()
5 k9 q% t5 `3 h6 I$ s3 l% d1 t& Q+ \+ w; F" H6 o1 h. i i
' U. n+ {# E5 ^% N1 {2 y; l& ?3 e. F% U) X$ y
可以看到,编译出的文件是ELF 64-bit LSB的可执行文件,ARM aarch64架构的。 " Z8 C' O% h+ K" b- Z
然后将程序放到飞凌嵌入式OK3568-C开发板中运行,这里使用ADB拷贝程序。可以看到在下图右侧窗口中看到,在OK3568-C开发板中已成功运行hello word程序。
; s. o9 h$ p2 r7 g# Z9 A$ q( ]![]()
9 N/ @1 H8 O! A6 g* ~* K+ s. N
7 m$ h3 x) j8 ~( ~( @
& d: H3 f- `& {' _0 }3. 关于开发板的WiFi自动联网 想要给开发板传输文件,就需要先连上网络。在上篇《发烧友实测 | OK3568-C开发板初体验》中介绍过,OK3568-C开发板使用一个脚本来进行WiFi配网,但每次开机后都需要再配置。可以写个脚本加入到开机自启动程序中。 ( C# _) h( O! N8 z }
例如,在/etc/init.d目录下,添加一个S99myinit文件,写入如下内容即可实现开机自动连网:
5 u: ^0 i9 ^* C" }0 w' M) V6 }- q9 Q3 `! V2 I/ N& r# t
#!/bin/sh+ M# N$ t& U& h& r
这里注意要替换为自己的WiFi名和密码,并且要给这个文件可执行权限。 3 d$ h, P; \% V/ r9 {
02RK3568 Linux源码编译 刚才介绍了只进行C/C++程序开发时进行交叉编译环境配置的方法。 ! e' f- z3 W3 R0 A
如果还要进行Qt开发,可以通过编译RK3568 Linux源码的方式,得到Qt的交叉编译工具链。由于我这里已经安装过了VirtualBox虚拟机和Ubuntu18系统,那就在自己的开发环境中进行RK3568的开发吧。
* g4 t) y* n: v9 q1 F5 Q% {1. 基础环境配置 在进行RK3568的源码编译之前,需要先进行对自己的虚拟机进行一些依赖包的安装,如下。首先是安装一些必要的库: 6 C5 a9 `) f8 y) c& u
4 }& u2 Y$ d5 P1 ]$ B t
) i: h/ n7 t7 \8 T* P
2 F: L5 X% Z0 w( F) msudo apt-get update sudo apt-get install build-essential
2 Z3 E5 j' ~- E# Q9 c然后还有安装一些编译OK3568 Linux源码所需的库:
0 {4 { D: q& L+ F( I% O5 W) {+ h0 }! Y1 p$ T: Y
, o% q5 f$ @' h7 U Osudo apt-get update2 j+ ~ E5 E: l) P+ F' z
此外,为了便于Qt开发,可选择安装Linux版的Qt Creator到自己的虚拟机中,安装过程也比较简单,并且我之前已经安装过了,这里就不过多介绍了。当然,不安装Qt Creator也是可以进行Qt程序的编译的,只要有Qt交叉编译环境即可。 * p9 Y6 Z- p' D9 e+ c
2. 准备RK3568源码 复制RK3568源码到Ubuntu虚拟机中,准备编译:
$ V1 Z) G) T% Z5 |+ s0 Z' M8 t1 J7 Q4 h( @% E; b
cat OK3568-linux-source.tar.bz2.a* > OK3568-linux-source.tar.bz2第一句是把.aa和.ab两个压缩包合并为一个压缩包,有个两个文件都差不多4G大小,这个合并的过程需要一点时间(大概2、3分钟左右),并且合并过程没有信息打印,命令行为不可输入状态,等变为可输入状态,即合并完成,并且在虚拟机上可看到合并后的压缩包。
2 l# E0 j3 Q0 f第二句是把合并后的压缩包进行解压,这个解压过程也要一点时间(大概20分钟左右),解压过程会有信息打印。 1 H" B1 x8 Q8 Q" f; c+ L8 E5 ]2 b
: U2 T3 w9 W: |5 U4 A& C4 z8 A
" K& c' m. e/ h( S$ \' ?0 t4 @% G Y0 v* q. |% d3 I' \
6 b" K$ v6 R8 R A
解压完成后,可以看到OK3568-Linux的源码文件夹:
- E0 c( a* n& n1 e: ^( d. r![]()
( ~- ?& P: {! F
q; Q0 |7 m$ U
6 l, a6 F3 @& ~9 Z
/ x1 u. o% v% v& E( T5 d3. 编译RK3568源码 在编译之前,需要确保自己的虚拟机有足够的磁盘空间和内存空间,我的虚拟机配置如下,我的笔记本一共12G内存,我给了虚拟机10G。 % V( e3 U" E* Q
+ ^& o& n2 a* G! J" L
( i# I; ^, m8 c
* V2 k) h$ ]3 R4 v& V
注意上图中的硬盘空间,只是这个虚拟机的最大空间,需要在ubuntu中使用df指令确认下实际的大小,如果不够大,可以使用GParted等软件调整自己的虚拟机硬盘空间。 5 \0 Q& I5 Z, w
如下图所示,我的ubuntu的硬盘现在总共是276G,这个截图是我编译完源码后截的图,感觉整个编译源码操作,耗费了有几十个G的空间,现在还剩余80G的空间可用。 ; i5 P/ D e9 `( X4 ?9 J
![]()
# i' g3 @# d E$ `: q" N9 j4 g! [" U2 f3 U$ a& q( a
* u% P; H- b9 j- X
3.1 全编译测试 进入到刚才解压后的RK3568源码目录,通过运行.build.sh脚本即可编译,在编译之前,可以先来看下脚本中的内容:
, D# ~7 T5 U9 {: I这里编译脚本比较长,截取部分图如下:
' X: n5 X- o9 L& g![]()
& H9 U$ H8 e' j8 [* K" P
) a% B; w- S8 O( G+ [* S; Q _$ J7 ^7 m4 j$ z, e
执行脚本后会先出现一个选项需要选择,选择1,即使用OK3568的配置。 & S; M/ g0 ^* C! i' _
4 y6 P F; d7 V+ [) u/ t) {4 w
% e9 H5 }8 E8 \! V. H. Z) T
0 A8 I" Q8 P! M" M! R) Q% u编译一段时间后(大概10分钟)会弹出下图界面,需要选择,提取图中信息: VCCIO4 和 VCCIO6 选择 1800000其余的选择 3300000
3 ?9 g. y, d/ x2 }
2 l( n; c: S' O' g& R L! _/ ]使用上下方向按键选择选项,按回车确认选择即可。 & \# G$ \7 x- ^ e- U: ]
![]()
- l/ J, k7 L0 @; G) M0 H! N" m1 u% i( R; e# ^4 u# y6 N. T! d9 d
6 V- T4 p' h& J$ @2 s! ?0 r编译的过程中,会十分耗费内存资源,我的电脑显示在编译过程中,内存基本占满了,再使用其它软件都会特别的卡,所以在编译的时候,就不用进行其它操作了,让它独自编译好了。 " S, B0 O) N3 Y( t0 l$ H$ ?' R
![]()
; [: d. `- J( O+ r( b
& j' l- \0 l( g: v7 h3 T: b: m, `/ d% i0 C& i
整个编译时间较长,我的电脑用了7、8个小时才编译完,从凌晨编译到天亮,还好没报错。编译成功后的截图如下,注意大片的红色部分不是错误信息,只是在提醒电源域的配置是否正确。 $ u( k7 ]. X7 c$ i
![]()
$ j8 J. X) U' g- X" ^" T" g6 s# z" G3 M$ p# m, \
% w* O6 ?5 V }0 k编译成功后,会在IMAGE文件夹下生成对应编译工程结果文件,这些文件中,update.img为打包好用于OTG或TF卡全烧写使用,其它的编译文件用于分步烧写时使用。
; k0 P9 e# y2 p* M; { 8 _' a( N v6 q8 j8 e
) k' ~5 M5 r* E& | ?$ j) @2 B; d$ u3 i# F7 O6 L/ g
3.2 内核单独编译测试 整个编译程序,十分的耗时,有时如果只是修改了内核代码,可以单独编译内核,编译方法是,在执行脚本时,指定一个kernel参数即可: ( f8 k( m1 h7 K
./build.sh kernel) B$ A! @0 o/ b: s4 w
03Qt程序交叉编译测试 1. Qt程序交叉编译 RK3568 Linux源码编译完成后,可以到output目录下的bin目录中查看编译出的交叉编译工具,对应Qt开发,需要注意是qmake这个工具,bin目录中的所有编译工具如下: " l8 W: ]0 Q: E8 z. F
![]()
9 [7 M8 A9 }3 _* Z8 z5 }- J( d
! ?+ j8 I3 d1 l" H0 D; h( ?) d3 Y
使用资料中的Qt程序进行交叉编译测试,我使用的是qcamera这里例程,将程序源码复制到Ubuntu中,然后使用如下指令进行Qt程序的交叉编译:
* c% ?, {' A/ q) M6 v. z7 {
$ J# U; o2 F/ a& W! w* k; r% ?9 `* m/ Z' A" V
export PATH=/home/xxpcb/myTest/OK3568/sourcecode/OK3568-linux-source/buildroot/output/OK3568/host/bin PATH第一句是临时添加环境变量; 第二句是使用RK3568源码编译结果中的qmak来生成Makefile; 第三句是使用make来编译; 编译结果如下,同样可以使用fie指令来确认编译出的可执行文件的文件类型。
4 S0 F* F6 u9 _0 `2 X / ?6 ~( m g: D4 j
# [% w; H1 j+ _9 o* d, C" i; i ]
- q" z( g$ z8 Q可以看到,编译出的fltest_qt_qcamera文件也是ELF 64-bit LSB的可执行文件,ARM aarch64架构的。
( \5 b& ?+ c3 @* M9 i2. Qt程序运行测试 同样使用ADB的方式,将可执行程序拷贝到板子中,然后运行,运行结果如下,注意我在qt程序中稍微修改了一下,给Exit字符串加了一个中括号,以确认板子中运行的就是我自己编译出的Qt程序。
. a- I1 M9 ~+ D; J/ ]! }, } 3 G. @! k- N! S
3 K4 F) V# ^9 S. Y5 X$ t6 ?; N" E; q4 W9 ?# N2 Z1 \6 P8 h
至此,Qt的交叉编译环境已验证可正常使用。
+ [% ?* z( M% I+ G8 { |