|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
作者:ouxiaolong8 Q9 y5 I" c2 A7 q- k
开发环境——2 y: g$ V( E% J7 H
主机:Ubuntu18.04+ K, [; F! o, q9 u% z
开发板:飞凌嵌入式OK3568-C开发板' K- ^" F8 M( R1 }" c
Windows下有很多虚拟机软件,目前市面上流行的有VMware和VirtualBox。VMware分为收费专业版Workstation Pro 和非商用免费版Workstation Player,推荐使用Workstation Player。3 W0 L* O' e% L* ?: Q3 w. v
笔者这里使用的编译主机的Ubuntu18.04,关于Workstation和Ubuntu安装笔者这里不在赘述,网上资料很多,笔者默认已经装好Workstation和Ubuntu。6 g1 K/ W" n& `8 t! v& ^
01依赖库安装) T/ H. R' w: S) K7 I$ a2 c3 z% p
1.1更新主机的源列表0 D0 t4 K$ B. t i6 H/ P
$sudo apt-get update1.2安装依赖工具
8 n& R0 B" `% l+ _* J5 ^$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服务环境搭建与测试% ?. Y: V2 r$ i' b; _; x
TFTP简单文件传输协议,是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。
4 S, U* F: h8 N! ?0 s- P) jTFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。
/ S* q+ ^" |, s9 o1 k! l(1)下载并安装tftp
% |3 T0 ~$ ^- A$sudo apt-get install openbsd-inetd(2)新建tftp目录和改变其属性
3 a K7 z# { C Q$sudo mkdir /tftpboot(3)修改/etc/inetd.conf文件+ B4 l& ~& b4 k; |6 N- e l
$sudo vim /etc/inetd.conf新增如下内容:
; O4 ~& Z P6 K2 N. }0 atftpdgram udp wait nobody /usr/sbin/tcpd/usr/sbin/in.tftpd /tftpboot(4)启动tftp
- z+ S! `" y" l0 U: K$sudo /etc/init.d/openbsd-inetd start(5)本地测试
1 f) q! l. ?* F: O1 v4 ]) M; c+ w; B在/tftpboot/目录下新建一个文件test,输入内容、保存。然后打开另外一个终端,测试文件传输。
1 A( U& S' [! J–输入命令tftp127.0.0.1
6 \. @& ~0 c4 E! {8 I) u R5 S% z# r–输入gettest
* h/ i- [ d9 t* n–输入q可以退出! _/ V* a. X2 D. C; H) q
–退出后,使用ls命令可以发现当前目录下有test文件,如果这个文件和服务器中的test文件内容一模一样,表明服务器搭建成功。( D7 a; x. X0 z- g$ h8 A o
![]() 编辑; ~, r7 b( W7 I, O T
(6)开发板测试
4 n' k( P, G- K- @1 S. J开发板下载测试
& `; V2 q* M/ B8 T m) e#tftp-g -l test -r test +IP地址: { W0 l+ E$ R, Y
![]() 编辑/ U7 \$ w2 o) `! x9 l5 U
(注:-l后的文件是下载后文件名,可以自定义;-r后的是服务器的文件名)' a7 T4 A b( `
03安装配置交叉编译工具链
6 B, y( Z! ]# ~. c8 s8 o在Linaro官网中有很多种GCC交叉编译工具链,因为我们所使用的RK3568开发板是一个Cortex-A55内核64位的开发板,选择aarch64-linux-gnu。6 x) h8 |8 _7 e9 a+ S+ y* _
地址:https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/
0 l+ }) z8 w; }. s![]() 编辑! B- r3 @" W& d; p$ ?3 T
图中有很多种交叉编译器,我们只需要关注这两种:2 [1 p% x. B6 |+ d
针对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。+ S9 ^ v+ o& m) W/ O+ B9 K
大家根据自己所使用的Ubuntu系统类型选择合适的版本,比如我安装的Ubuntu14.04是64位系统,因此我要使用gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。
; B% B4 M, ~( N8 o04交叉编译器安装% c1 J2 j# b# n8 _# g3 D8 q
将交叉编译器拷贝Ubuntu中的/opt目录下(没有opt则新建该目录),进行如下步骤:0 P: k6 _4 O/ N
1. 解压gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar5 L9 D, X3 v6 s% D
用以下命令: {+ y6 Q) ~( x' f0 e6 O
$sudotar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar //必须用超级用户模式。! _+ S( R& y/ @9 H3 M9 i
2. 编辑~/.bashrc文件7 w) ]) w4 y8 G- N! N9 T4 S
$vi ~/.bashrc
g' e, p5 o6 A在文件最后增加一行
: \7 F' Y) Q0 o; i% n" e; EexportPATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin保存退出。 U+ C2 @/ ~5 {
3.运行source~/.bashrc让文件生效
$ G, N, u3 E- Z# f$source ~/.bashrc" w6 x& L i+ @% y1 _& r
05交叉编译器验证
7 [ E. C) T2 g% W* U" ] b* Q, i方法一:
/ n+ H$ p% B# J( H在命令行下输入aarch64-l然后按tab键看会不会自动补全
' U. i9 `; b1 Y方法二:* @( x( d4 i7 y3 s% G
输入:aarch64-linux-gnu-gcc-v
R0 y, W6 j; s v; g; U8 t![]() 编辑
! P$ P% |7 V" y6 V5 y如上图则表示配置成功!
, P; _& f. o8 v' \' }; n从图中可以看出当前交叉编译器的版本号为7.5.0,说明交叉编译工具链安装成功(注:编者安装的交叉编译器版本为7.5.0,OK3568-C开发板源码包里是9.3.0版本)。
# a8 ?8 J. I* S使用刚刚安装的交叉编译器的时候使用的命令是:! H" g% R% S# @8 M' w
aarch64-linux-gnu-gcc该命令的具体含义如下:7 a' y# s: { T
1.aarch64表示这是编译aarch64架构代码的编译器。AArch64是ARMv8架构的一种执行状态。
% A! ~) F6 f" K8 _2 r2.linux表示运行在linux环境下。
0 ^& _4 Y! s0 ?- V. |; V5 x3.gnu表式嵌入式二进制接口。
5 p* z6 @/ _, {4.gcc表示是gcc工具。
3 [- }0 y; B& x最好的验证验证方法就是直接编译一个例程,我们就编译第一个裸机例程“hello.c”试试。7 M5 M- Q1 [: J; _# c
$vim hello.c使用如下命令查看hello文件信息:
! \* N1 q& j) J, g) L/ I. x7 P; Y$file hello![]() 编辑2 e4 V# }, M: F8 o; X2 ^+ p, I1 \
从图中可以看到hello是64位LSB的ELF格式文件,目标机架构为ARMaarch64,,说明我们的交叉编译器工作正常。6 _% g) Q/ L1 D0 E6 A- X* n, \2 w
最后将程序下载到开发板,修改用户权限后即可运行。
& e0 e! l4 u) W: @" B/ S G2 f) v![]() 编辑1 g3 Z9 X3 Y7 t0 ]
值得注意的是,在RK3568的源码中有交叉编译链,只是版本要旧些,在源码prebuilts目录下。笔者配置该工具链主要用在应用开发。
2 I/ U. I4 ~- C! r& u1 u- h* @4 u' P* S* d
|
|