|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
作者:ouxiaolong9 H2 T, ]& e* N2 a
开发环境——
+ X0 O3 `3 ~+ \主机:Ubuntu18.04
; z% V6 {1 f& s4 U) x& H+ T7 Q开发板:飞凌嵌入式OK3568-C开发板5 Y% i# f* N* K+ @* A* Z: R
Windows下有很多虚拟机软件,目前市面上流行的有VMware和VirtualBox。VMware分为收费专业版Workstation Pro 和非商用免费版Workstation Player,推荐使用Workstation Player。
. Z7 p f' U. s$ B4 h, y6 r# i$ g笔者这里使用的编译主机的Ubuntu18.04,关于Workstation和Ubuntu安装笔者这里不在赘述,网上资料很多,笔者默认已经装好Workstation和Ubuntu。6 m: O$ |' \* w/ y
01依赖库安装6 ^/ |' h: I( }
1.1更新主机的源列表! z5 T0 D* J3 F
$sudo apt-get update1.2安装依赖工具
- d& l" T2 o" ]4 f$sudo apt-get install repo git ssh make gcc libssl-devliblz4-toolexpect g++ patchelf chrpath gawk texinfo chrpathdIFfstatbinfmt-supportqemu-user-static live-build bison flex fakeroot cmakegcc-multilibg++-multilib unzip device-tree-compiler python-piplibncurses5-devbuild-essential vim tree 02TFTP服务环境搭建与测试: d. \* B; x) L! w; f
TFTP简单文件传输协议,是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。
+ T( Y! ?( _# f4 }2 Z& u$ NTFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。: n* m% c4 ?7 K
(1)下载并安装tftp7 b4 ?: m$ w& s. T
$sudo apt-get install openbsd-inetd(2)新建tftp目录和改变其属性! Z4 `( \$ y5 L3 {4 c
$sudo mkdir /tftpboot(3)修改/etc/inetd.conf文件
6 {5 y' G1 ]' n' g( |" ^4 C$sudo vim /etc/inetd.conf新增如下内容:& ?# W% L1 u( A- N9 v, U
tftpdgram udp wait nobody /usr/sbin/tcpd/usr/sbin/in.tftpd /tftpboot(4)启动tftp
4 w8 m) G% r! t/ n# }. K* `$sudo /etc/init.d/openbsd-inetd start(5)本地测试
( f4 z X9 v6 |1 A R, X在/tftpboot/目录下新建一个文件test,输入内容、保存。然后打开另外一个终端,测试文件传输。
9 i9 v( Q: Z5 ?1 A2 d- a–输入命令tftp127.0.0.1( J' O7 |5 Z0 A+ E! D. L
–输入gettest- [) T0 ^( ]: b! v: X; P8 G
–输入q可以退出8 y! R+ G) R" S1 r+ G
–退出后,使用ls命令可以发现当前目录下有test文件,如果这个文件和服务器中的test文件内容一模一样,表明服务器搭建成功。
8 k, ?& l5 {; }% X# L" g![]() 编辑" V3 _8 u* c1 M4 Z, @
(6)开发板测试: p' K% p' j+ E; T
开发板下载测试 V' Y; ?$ N% A( d
#tftp-g -l test -r test +IP地址+ ^* J7 Z+ t% o6 W B" b% n
![]() 编辑: \' `" P. u2 Y ` {
(注:-l后的文件是下载后文件名,可以自定义;-r后的是服务器的文件名); {) Z3 [, H* V8 h, ?; z9 I: b z
03安装配置交叉编译工具链4 ?# T9 z+ q0 b5 ]
在Linaro官网中有很多种GCC交叉编译工具链,因为我们所使用的RK3568开发板是一个Cortex-A55内核64位的开发板,选择aarch64-linux-gnu。5 O/ t* R, y' a% a4 T, d" f8 e/ O0 V. f
地址:https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/
1 o0 `1 |' y% K' n9 t4 N, \![]() 编辑6 Q/ ~% ^$ _1 {; h; A5 m
图中有很多种交叉编译器,我们只需要关注这两种:
" a5 V0 `6 K( Y& k针对32位系统的gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu.tar.xz和针对64位系统的gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。
9 s ^9 A3 i9 C H大家根据自己所使用的Ubuntu系统类型选择合适的版本,比如我安装的Ubuntu14.04是64位系统,因此我要使用gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。 [$ k4 s& T X2 ]' L( v! K8 I
04交叉编译器安装
) g+ @5 G$ C, U$ N! ~将交叉编译器拷贝Ubuntu中的/opt目录下(没有opt则新建该目录),进行如下步骤: _% R4 j. z' [" y' ^1 ]( e/ e
1. 解压gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar# g* n+ c5 T; ?7 }- u' {6 `6 M
用以下命令9 S+ ?/ }* ^/ h
$sudotar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar //必须用超级用户模式。; `: C& K" q% l1 w, H+ j- z
2. 编辑~/.bashrc文件$ Y6 e3 R) [$ `/ u
$vi ~/.bashrc6 b. ~# o8 t. @. L
在文件最后增加一行
3 e3 k, q' y: h8 S9 EexportPATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin保存退出。3 a) B- @. g$ h( }8 k! ` a
3.运行source~/.bashrc让文件生效
& B3 Z6 s2 W1 I4 H! v) l2 @$source ~/.bashrc5 M5 a% p! g2 ?
05交叉编译器验证
8 K. x2 }, X5 B7 {3 E/ i1 S方法一:8 z! s P- |- N: B* G
在命令行下输入aarch64-l然后按tab键看会不会自动补全2 Z' Q# y; W0 k3 d
方法二:( |+ P& m, i, h* R
输入:aarch64-linux-gnu-gcc-v
7 O) o# k7 J7 C# i![]() 编辑( ]( x% y Y0 f2 _' _ q$ K8 B
如上图则表示配置成功!3 R- B( K, G9 k) b6 b4 N) w/ v
从图中可以看出当前交叉编译器的版本号为7.5.0,说明交叉编译工具链安装成功(注:编者安装的交叉编译器版本为7.5.0,OK3568-C开发板源码包里是9.3.0版本)。* c6 ]- N; r7 u! z8 N( ~
使用刚刚安装的交叉编译器的时候使用的命令是:
( R2 ^, [0 v( y% q# ?aarch64-linux-gnu-gcc该命令的具体含义如下:
1 Q. p) ~( o) }) N# B1.aarch64表示这是编译aarch64架构代码的编译器。AArch64是ARMv8架构的一种执行状态。
5 U; `& }- d* H2.linux表示运行在linux环境下。4 F) d4 [# v: p: E3 Z
3.gnu表式嵌入式二进制接口。, I7 i- Y7 f4 Y9 T; m
4.gcc表示是gcc工具。
* u( O, }4 M+ u最好的验证验证方法就是直接编译一个例程,我们就编译第一个裸机例程“hello.c”试试。5 `5 a' W+ ~0 M v; l
$vim hello.c使用如下命令查看hello文件信息:
% c1 e+ R- v! g$ E1 M) l$file hello![]() 编辑
( {! J) Y7 j1 J0 j4 h$ `, J- U从图中可以看到hello是64位LSB的ELF格式文件,目标机架构为ARMaarch64,,说明我们的交叉编译器工作正常。) n d" g4 g& X9 r W0 h- [
最后将程序下载到开发板,修改用户权限后即可运行。
0 P9 L, r3 i0 R# S![]() 编辑% T3 l" \' o9 E, h5 k
值得注意的是,在RK3568的源码中有交叉编译链,只是版本要旧些,在源码prebuilts目录下。笔者配置该工具链主要用在应用开发。 _, j \/ g$ _" G4 N+ y0 B1 Q
* Y! V5 E7 T# W
|
|