|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
作者:ouxiaolong
2 p7 V5 M4 ~7 D$ Y开发环境——- a. V1 a5 ^0 [" G- h) D; r
主机:Ubuntu18.04
) i6 j: y6 t8 S; c; @开发板:飞凌嵌入式OK3568-C开发板* Y, L8 E% L; {" x8 M
Windows下有很多虚拟机软件,目前市面上流行的有VMware和VirtualBox。VMware分为收费专业版Workstation Pro 和非商用免费版Workstation Player,推荐使用Workstation Player。: Y2 V" x6 l$ _! ^; H( K$ ~9 x
笔者这里使用的编译主机的Ubuntu18.04,关于Workstation和Ubuntu安装笔者这里不在赘述,网上资料很多,笔者默认已经装好Workstation和Ubuntu。
% I/ A- E2 ], p1 i01依赖库安装/ S: \! d* p3 r4 B, ]' V8 y
1.1更新主机的源列表
' z% f0 Z1 { f% [- Q$sudo apt-get update1.2安装依赖工具, c7 d- ~$ F9 A
$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: Y, s% s* J# g2 X
TFTP简单文件传输协议,是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。
( O: _( S; c( \. R3 ATFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。8 R. Z1 a' R" K5 `( j0 l' ]- F
(1)下载并安装tftp
' h( B3 i, E2 F$sudo apt-get install openbsd-inetd(2)新建tftp目录和改变其属性
% S/ x. o2 l( A. T3 h- v$sudo mkdir /tftpboot(3)修改/etc/inetd.conf文件0 D8 E( y* C$ b2 r2 t
$sudo vim /etc/inetd.conf新增如下内容:
- T9 y. @" z7 p, m* h. c+ c4 wtftpdgram udp wait nobody /usr/sbin/tcpd/usr/sbin/in.tftpd /tftpboot(4)启动tftp- j! E; K- N+ Y; p
$sudo /etc/init.d/openbsd-inetd start(5)本地测试
; a( e6 n0 v8 s在/tftpboot/目录下新建一个文件test,输入内容、保存。然后打开另外一个终端,测试文件传输。
" R5 ~3 {0 N! ^2 |& W O; {- R–输入命令tftp127.0.0.14 I7 a0 P* W% Y% }4 ~9 d2 X
–输入gettest# {3 L- d6 o! X" T+ m' \8 b
–输入q可以退出% X8 ^) [: v. v$ S8 l2 b
–退出后,使用ls命令可以发现当前目录下有test文件,如果这个文件和服务器中的test文件内容一模一样,表明服务器搭建成功。: g0 g( ?+ \% x! L) e% g% B# y
![]() 编辑
2 m4 G, z8 `$ V(6)开发板测试' i) M/ N* w1 s+ D9 j: I! s& x
开发板下载测试
; i& X2 N& ]9 b5 Q9 S, f6 ]0 G#tftp-g -l test -r test +IP地址6 P& p" }4 R4 M" W5 a! G
![]() 编辑/ k `( U* u" b& R. g/ P
(注:-l后的文件是下载后文件名,可以自定义;-r后的是服务器的文件名)
, A& g# j& a; z. m, j# Q2 X03安装配置交叉编译工具链
. c: s; b/ \3 O+ e2 O* r在Linaro官网中有很多种GCC交叉编译工具链,因为我们所使用的RK3568开发板是一个Cortex-A55内核64位的开发板,选择aarch64-linux-gnu。
a/ T% M T5 e. T地址:https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/ v7 [1 T8 {- K7 Q+ J6 z3 j9 t/ L
![]() 编辑/ x" {& j" d' N
图中有很多种交叉编译器,我们只需要关注这两种:* }5 p' o: D9 i' |4 Y1 g' e3 P) n
针对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。
, s% d/ ]3 T" ?) P大家根据自己所使用的Ubuntu系统类型选择合适的版本,比如我安装的Ubuntu14.04是64位系统,因此我要使用gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。. ]. Q! M$ {) S3 x0 ]% T# A
04交叉编译器安装) \( X; {6 N( Z- z. J, G
将交叉编译器拷贝Ubuntu中的/opt目录下(没有opt则新建该目录),进行如下步骤:
6 B: _" |4 v+ V1. 解压gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar
4 {' `& S7 r2 C1 \" Z9 c用以下命令0 W5 n7 I; s: \+ U) l5 I( m6 ^
$sudotar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar //必须用超级用户模式。
- d3 ~- y7 m2 Q% i; l5 \1 t7 n2. 编辑~/.bashrc文件$ J$ B$ b; G+ C: ?" _# f$ c1 K
$vi ~/.bashrc8 D1 V' h. b. v! D" j1 U
在文件最后增加一行# z4 s; X! [0 \* [+ L
exportPATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin保存退出。
* g- ~6 F$ E6 r3.运行source~/.bashrc让文件生效
7 {# B) E+ s- T p$source ~/.bashrc
+ P* ]+ E7 A4 V05交叉编译器验证
, _: W9 J( ~: f2 {# Z( x$ T方法一:
) j! D- Y9 v* [' H2 e' [在命令行下输入aarch64-l然后按tab键看会不会自动补全2 h$ v6 r2 C" S3 O* s) ~- F4 e8 @9 B
方法二:* y' y4 S# q J" |
输入:aarch64-linux-gnu-gcc-v; `4 a+ k& F3 \' x; i
![]() 编辑, k6 U0 G _, k# L5 Y
如上图则表示配置成功!8 n) g0 w# q5 S8 G/ f% [# @4 ?3 V
从图中可以看出当前交叉编译器的版本号为7.5.0,说明交叉编译工具链安装成功(注:编者安装的交叉编译器版本为7.5.0,OK3568-C开发板源码包里是9.3.0版本)。3 b* H6 a& V, z" _3 q, o
使用刚刚安装的交叉编译器的时候使用的命令是:
6 y7 Q8 R- b: J x8 X: C3 m. iaarch64-linux-gnu-gcc该命令的具体含义如下:
- t& f9 v7 W* V. T" V1.aarch64表示这是编译aarch64架构代码的编译器。AArch64是ARMv8架构的一种执行状态。5 V9 W! ~0 X u( n, ]
2.linux表示运行在linux环境下。, v0 C( g2 o( X1 q/ v, D2 N3 z
3.gnu表式嵌入式二进制接口。# @6 U: Y% T- Q8 i5 D1 o5 d* l
4.gcc表示是gcc工具。2 M. }' I9 I: T$ [6 }
最好的验证验证方法就是直接编译一个例程,我们就编译第一个裸机例程“hello.c”试试。0 t5 ?5 E& @$ `; b, V
$vim hello.c使用如下命令查看hello文件信息:. P0 `6 z @' Q: D$ f+ o" ~0 P! F
$file hello![]() 编辑8 @1 z$ v; K- d: s9 E1 |
从图中可以看到hello是64位LSB的ELF格式文件,目标机架构为ARMaarch64,,说明我们的交叉编译器工作正常。1 `/ B4 r3 _$ ?3 R, x0 f+ i
最后将程序下载到开发板,修改用户权限后即可运行。# z( o: |: {- z/ A( M& R4 f
![]() 编辑
: `6 ] @( N/ u( o3 `1 k, a值得注意的是,在RK3568的源码中有交叉编译链,只是版本要旧些,在源码prebuilts目录下。笔者配置该工具链主要用在应用开发。
; v9 Q2 m9 t3 h+ W9 _. W$ O0 Y5 a$ ?& Q" a
|
|