EDA365电子论坛网

标题: 嵌入式交叉编译环境的搭建过程,图文解说 [打印本页]

作者: haidaowang    时间: 2020-11-6 14:48
标题: 嵌入式交叉编译环境的搭建过程,图文解说

( y$ Q8 y# M. |# z4 Y6 b; M    电脑系统:win7系统。虚拟机系统:workstation6.5 。虚拟机安装的linux版本:fedora9.0。内核:linux2.6.25  。" M# [9 U5 s& a, `
8 k" B$ k# _2 \) S
    首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。
- N! ], O% q' m5 b7 P
! V. g6 y* X. Z- r" E5 t: E   交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。
& k0 s  g$ y$ n5 |/ f
1 _2 Z: k/ A; l7 D2 [   那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。3 T+ B# `1 l% D1 R- ^
! g  Q8 m, j7 ]. T( J
   现在正是介绍交叉编译工具链的安装步骤,我使用的交叉编译工具链是arm-linux-gcc-4.4.3,把它放在linux系统的路径是图一:
: |/ [' i1 M6 u' X+ ]* d# C) Y" g( `( E# I7 E6 J
+ z: c9 w1 \( {0 O# g
   如图一所示,在linux系统的路径/home/song/share下放了交叉编译工具链arm-linux-gcc-4.4.3的压缩包,另一个版本的不用。有的人可能会问到怎么把这个压缩包弄到虚拟机的linux的系统的,我是通过samba服务从主机复制到虚拟机的,这里的share文件夹就是我samba服务器的工作目录,多了不说,这不是重点。0 o( Q0 E# D& U6 ]

7 `+ r7 u1 q& P5 ~, Q2 ^   然后通过命令mkdir embedded 建立一个arm-linux-gcc的安装目录,如图二所示。当然安装路径和目录名称“embedded”可以依自己的喜好而定。8 N* [: g8 s' @
8 Q5 F( L! ]# E$ m  ]% h, e- {
* m! U1 w  D# k/ L" k
8 Z) S- K& o9 r
+ u% M- q" W0 v: y4 T

8 u9 i& `1 h5 @- L) x* |' P# {5 V8 E   然后通过命令将share文件夹下的arm-linux-gcc-4.4.3.tar.gz复制到这里的embedded文件夹下,如图四所示。当然这里你也可以不进行这一步我这是为了方便以后管理,将arm-linux-gcc安装到embedded文件夹下,方便以后寻找。; h& H% }; n1 N3 c0 M
. _9 n, @8 l4 q  ~7 J4 e

! u0 D- a8 `* q) J$ o* ]# o/ ~: l5 T' E
     然后使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz将embedded文件夹下的arm-linux-gcc-4.4.3.tar.gz解压缩安装到当前目录下 ,如图五所示。
' ]! s. i' H! l* t$ k7 {! w' o
( Q$ w5 n3 ^& X# n0 L 5 {6 b8 m% F6 V3 D+ k

! k5 N% j3 z6 O' V/ a      执行完解压缩命令,就已经将交叉编译工具链arm-linux-gcc-4.4.3安装到linux系统上了,这里默认安装到了图六所示的路径上。
" m# C) ?/ W+ m- I  u* P) T3 P' i. F( H" C# A9 }

- r" ?+ r8 D5 K4 t  c! c, z( e" g& S* @
0 x, F  z8 p9 ]. v4 _% A; G3 X* b     接下来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具。记下图六中的安装路径,使用图七中的命令:vi /etc/profile 编辑profile文件,添加环境变量。
4 @7 [9 C3 t" |! J7 I  V, _+ }* A0 x) p

" H  Z( v# c3 R
- g& Z5 m* l& U; P$ g( S6 L      在profile中的位置处,添加图八所示的红线标注的一行,路径就是图六中的红线标注的路径后面加上/4.4.3/bin。! }4 Q% O9 g" C7 t# r, I& m

3 B$ U: ~4 c# i0 N" G2 b* I 6 f7 ~1 X  X1 {5 V3 }7 T) s3 U

" }! J6 B/ H( R- `, |: t- M   图八中的路径一定是你自己的安装路径,可以使用pwd命令查找一下那个bin目录的路径。添加完路径后,保存退出。接下来使用命令:source /etc/profile,是修改后的profile文件生效,如图九所示。
4 F, F% ?" H0 f0 w6 q+ M: s( i
, G; x6 V/ l2 G" L& N' z , T% w3 e6 }/ I* v
! ^; |9 v& L. @, Q2 o" W; B
   然后,使用命令:arm-linux-gcc -v查看当前交叉编译链工具的版本信息,如图九中的红线标注第③行所示。很明显从图九可以看到,如果不执行第②步,则查看版本信息不成功。8 M/ c8 x: `2 f
: d% V8 f8 P7 ~; C# ~
   然后验证交叉编译工具链是否安装成功并且可以使用,如图九所示,随便找一个目录编辑一个hello源代码。% d0 g. f  N8 M" S/ Z& K7 U
; l  |; c" Q+ m# m( T
+ U. X2 I5 I; m5 T6 {  j  G

7 C# U, {) r3 e, u5 O8 u$ j . z( z9 x1 x2 j: q
/ U* G8 s' n3 f
   编辑好hello.c文件后,保存退出。然后使用交叉编译器对hello.c进行编译,并生成可执行文件hello,如图11所示。5 O! z  p' V9 g/ O0 I/ X
1 f7 B8 K) ?. X7 ~# O

( O0 {& y7 ~1 F& ^# t6 L- ^1 b( v7 [. R& B& W6 s  L: M
   这里生成的hello文件并不能像gcc编译出来的文件那样直接使用“./hello”命令执行并显示内容, 如图12所示,因为它是一个二进制文件,只能下载到开发板上执行!
# [2 Z; S+ u0 ^; Y; {
; J0 k* r& i1 s/ N/ h! I8 l( {4 j
3 T( h9 c( ~3 ^1 [* E* O6 o- T3 v& H) {1 M, Q
    至此,搭建交叉编译环境步骤结束。
" j. o1 V4 h+ O$ P9 O; A  c
作者: younicp    时间: 2020-11-6 15:30
图文解说嵌入式交叉编译环境的搭建过程




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2