|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
作者:ouxiaolong- V, I& o+ ?6 x, D! E- k- M
开发环境——1 U7 t% Z0 A+ B% m0 `' ^" ~6 d
主机:Ubuntu18.04
7 e" H8 `+ G( p2 {7 G/ {开发板:飞凌嵌入式OK3568-C开发板
5 I5 J" j7 r3 }* p6 P$ [2 a6 eWindows下有很多虚拟机软件,目前市面上流行的有VMware和VirtualBox。VMware分为收费专业版Workstation Pro 和非商用免费版Workstation Player,推荐使用Workstation Player。; d3 y8 q) S. O3 N3 R
笔者这里使用的编译主机的Ubuntu18.04,关于Workstation和Ubuntu安装笔者这里不在赘述,网上资料很多,笔者默认已经装好Workstation和Ubuntu。
7 Y( t- T: t. P4 D4 z' b! h7 T01依赖库安装- N2 [2 t, {5 P$ B; K# W k
1.1更新主机的源列表* w$ `) o9 r. S3 @* v$ `$ E
$sudo apt-get update1.2安装依赖工具
4 C0 ?+ |" T1 W( t4 E$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服务环境搭建与测试
Q s. y. v- ^; a7 i3 PTFTP简单文件传输协议,是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。0 A. s4 a/ T- @4 Q
TFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。2 E- Q% N, [- F
(1)下载并安装tftp6 }3 t3 K( s& [/ l! T2 o
$sudo apt-get install openbsd-inetd(2)新建tftp目录和改变其属性3 A8 _$ j& k" [3 ~+ L' u: G5 i1 i! E
$sudo mkdir /tftpboot(3)修改/etc/inetd.conf文件$ z! h7 M) L+ }% W1 t
$sudo vim /etc/inetd.conf新增如下内容:
0 z; z8 t+ W7 P9 _: a6 Ntftpdgram udp wait nobody /usr/sbin/tcpd/usr/sbin/in.tftpd /tftpboot(4)启动tftp' z& o4 L, h1 Y7 p
$sudo /etc/init.d/openbsd-inetd start(5)本地测试* X6 r# u8 F4 Q+ u! U: q
在/tftpboot/目录下新建一个文件test,输入内容、保存。然后打开另外一个终端,测试文件传输。/ X! O/ h: G- e# b
–输入命令tftp127.0.0.18 I# @5 ~* }6 @" {
–输入gettest' _" }5 c) h1 F* _0 w2 g( m
–输入q可以退出
3 G1 e$ m+ I; e6 S–退出后,使用ls命令可以发现当前目录下有test文件,如果这个文件和服务器中的test文件内容一模一样,表明服务器搭建成功。
# K) _1 A4 F/ B3 d# }7 C; h: T. R( T: D![]() 编辑
; @# S u) \1 s# L(6)开发板测试7 i' q4 k, n- o& C5 V+ `3 Y" o
开发板下载测试
& e, Z" H' p k) L$ s: u& X% P#tftp-g -l test -r test +IP地址, } d6 ~" J7 N
![]() 编辑
1 k0 j1 c9 _7 L, [(注:-l后的文件是下载后文件名,可以自定义;-r后的是服务器的文件名)! ^ f/ r) `4 r' N' N
03安装配置交叉编译工具链
: [ a2 g% t1 D1 y在Linaro官网中有很多种GCC交叉编译工具链,因为我们所使用的RK3568开发板是一个Cortex-A55内核64位的开发板,选择aarch64-linux-gnu。% d( a; N- O7 L$ M; B
地址:https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/3 g" `0 Z3 D5 v6 B
![]() 编辑- d1 ]. x Q0 t% n
图中有很多种交叉编译器,我们只需要关注这两种:
# f. C8 Q% g/ ^2 G+ A针对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。5 H- @8 U" E1 P R8 i! h
大家根据自己所使用的Ubuntu系统类型选择合适的版本,比如我安装的Ubuntu14.04是64位系统,因此我要使用gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。$ ^& z' m2 }, ?* g3 u( L' C
04交叉编译器安装
2 T' T9 l* f$ t将交叉编译器拷贝Ubuntu中的/opt目录下(没有opt则新建该目录),进行如下步骤:. O1 o# k4 X. F3 l5 a e% K7 x
1. 解压gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar
! h) @( |4 h3 Y; B% b; d0 z7 ~用以下命令. ]: ?& `8 M5 E" M6 t4 J* e# ^( J
$sudotar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar //必须用超级用户模式。, D; V. L4 k) {7 c: N5 ?
2. 编辑~/.bashrc文件
3 ]% J" N/ L4 V5 L$vi ~/.bashrc, ~& J" a4 z8 K. G% m' h7 x2 W
在文件最后增加一行3 _4 J3 l8 |7 V1 _, A, K# W0 S
exportPATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin保存退出。
7 g8 `3 c3 e% N w3.运行source~/.bashrc让文件生效" C. t* ~, E; B: x( D3 h
$source ~/.bashrc g+ e$ R+ a' c/ ^7 V8 }
05交叉编译器验证4 I- H4 V( Z7 y9 M
方法一:* w, J; O3 T; G- A
在命令行下输入aarch64-l然后按tab键看会不会自动补全 C, c2 H, t4 | c' B" Z& ?
方法二:
3 x0 p- p/ C. r$ ~ i0 Y输入:aarch64-linux-gnu-gcc-v
2 r/ g7 N: Y# A# S; m+ r% m![]() 编辑
- M: O, G7 ~, h5 C" z如上图则表示配置成功!
7 g g2 U* G G0 h5 }0 \% M从图中可以看出当前交叉编译器的版本号为7.5.0,说明交叉编译工具链安装成功(注:编者安装的交叉编译器版本为7.5.0,OK3568-C开发板源码包里是9.3.0版本)。) C# g4 ~: H* L. F5 M, f9 j F1 W
使用刚刚安装的交叉编译器的时候使用的命令是:
6 O+ \& [ i3 X) E3 X3 Q' Maarch64-linux-gnu-gcc该命令的具体含义如下:
, |, A; [; o2 Z& i* C2 |- L y1.aarch64表示这是编译aarch64架构代码的编译器。AArch64是ARMv8架构的一种执行状态。
& c0 `( ^5 E. n0 B, l2.linux表示运行在linux环境下。
. Z3 M: a1 J" E& h3.gnu表式嵌入式二进制接口。0 V& S+ ]/ q4 |- q! d
4.gcc表示是gcc工具。
( c- b7 B6 b* ~7 L) x* P& Z5 u0 T最好的验证验证方法就是直接编译一个例程,我们就编译第一个裸机例程“hello.c”试试。
4 P$ W9 O2 i O, v$vim hello.c使用如下命令查看hello文件信息:4 J( }& d0 q1 H+ ]! U
$file hello![]() 编辑
( D! D' q% ~; J6 ~. F v从图中可以看到hello是64位LSB的ELF格式文件,目标机架构为ARMaarch64,,说明我们的交叉编译器工作正常。1 h* a3 x0 q+ b/ r. J4 d
最后将程序下载到开发板,修改用户权限后即可运行。
# a# G, G: M" a" k( T" R![]() 编辑* ^3 `# r% F9 j6 _: d/ e/ P
值得注意的是,在RK3568的源码中有交叉编译链,只是版本要旧些,在源码prebuilts目录下。笔者配置该工具链主要用在应用开发。
1 E6 j( y0 E o4 p2 L- p0 N- ~' I% S( X3 R# O0 }9 Z
|
|