找回密码
 注册
关于网站域名变更的通知
查看: 359|回复: 1
打印 上一主题 下一主题

嵌入式交叉编译环境的搭建过程,图文解说

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-11-6 14:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

  j" G% ~1 @" a7 m  z    电脑系统:win7系统。虚拟机系统:workstation6.5 。虚拟机安装的linux版本:fedora9.0。内核:linux2.6.25  。( K" S2 _( \0 i& |" _  f

+ A5 x" F$ n( a3 i6 b7 t: g    首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。
! a7 {. a; `1 r4 y, \0 t" `$ J/ [) M4 R- G  L
   交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,ARM-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。9 M5 _! O) k2 F6 F; h  z
0 H+ z8 |8 a" C; }. A! n
   那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。
: ^4 |0 Y+ w( O3 s6 f, O, O/ V5 q- |) v, ~1 W6 f- n
   现在正是介绍交叉编译工具链的安装步骤,我使用的交叉编译工具链是arm-linux-gcc-4.4.3,把它放在linux系统的路径是图一:
) W9 Y! Q  V/ Z0 a) ?/ l
  K/ `7 x1 G! M; [& f
4 N, L4 L8 p- A$ g+ B3 h& b* F   如图一所示,在linux系统的路径/home/song/share下放了交叉编译工具链arm-linux-gcc-4.4.3的压缩包,另一个版本的不用。有的人可能会问到怎么把这个压缩包弄到虚拟机的linux的系统的,我是通过samba服务从主机复制到虚拟机的,这里的share文件夹就是我samba服务器的工作目录,多了不说,这不是重点。8 o  [* F6 [' v

' {0 P+ [  ~8 V2 f& R% K   然后通过命令mkdir embedded 建立一个arm-linux-gcc的安装目录,如图二所示。当然安装路径和目录名称“embedded”可以依自己的喜好而定。* D7 ?  X2 f8 o. e' e4 J
& D+ p6 L# G6 t/ |) R6 p
9 H  x& E6 s' k: l
" ^7 D# V5 Z! U+ p

8 y! z& e8 g. \% p0 j& J5 j8 B2 b. t7 f$ H% t
   然后通过命令将share文件夹下的arm-linux-gcc-4.4.3.tar.gz复制到这里的embedded文件夹下,如图四所示。当然这里你也可以不进行这一步我这是为了方便以后管理,将arm-linux-gcc安装到embedded文件夹下,方便以后寻找。
1 x4 i& @$ ?0 C: L9 X. D. P3 |4 t4 s

, z% C" P1 t3 o8 r
% U0 s0 H3 t8 `6 E: K     然后使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz将embedded文件夹下的arm-linux-gcc-4.4.3.tar.gz解压缩安装到当前目录下 ,如图五所示。- ?- k* s9 p2 c( y

3 x. y. `7 I8 b  a% I+ P7 f
$ }2 ~6 b1 u2 K0 \, s  R3 w
, L. o- f0 ]! t' {: O      执行完解压缩命令,就已经将交叉编译工具链arm-linux-gcc-4.4.3安装到linux系统上了,这里默认安装到了图六所示的路径上。
" v9 m) K+ Z( _# @! J  y9 g7 b! K, s
0 K/ z/ y" \2 T) V5 L
( r: [) c8 G2 r# P, @
, F" F& L3 Y" x7 i0 u/ s" c6 P) Y     接下来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具。记下图六中的安装路径,使用图七中的命令:vi /etc/profile 编辑profile文件,添加环境变量。
$ F' {' b2 r# b  U3 D
# w5 c- T4 I- G- `, T ( j# Z3 L2 l. b- K: d1 y8 F8 v
* I: y7 Q% a6 b* q: j# N
      在profile中的位置处,添加图八所示的红线标注的一行,路径就是图六中的红线标注的路径后面加上/4.4.3/bin。2 K9 _- b' `$ D- o( e" Q

; z' }9 }, w2 `) C
. ]' P7 u; f, [
& }8 M/ B' V! ~% n   图八中的路径一定是你自己的安装路径,可以使用pwd命令查找一下那个bin目录的路径。添加完路径后,保存退出。接下来使用命令:source /etc/profile,是修改后的profile文件生效,如图九所示。0 u+ L3 P; d: M3 ^/ I: u+ `1 e
! D. `3 \+ b1 Z. X2 E$ P% `7 w
# @8 Q+ U" ^- H3 }: l- C1 c% q
/ o7 Z: C/ T' Q# O2 F
   然后,使用命令:arm-linux-gcc -v查看当前交叉编译链工具的版本信息,如图九中的红线标注第③行所示。很明显从图九可以看到,如果不执行第②步,则查看版本信息不成功。
. x% @- \  ~+ w' ?
% s& ~2 t) r+ D' d: \! N   然后验证交叉编译工具链是否安装成功并且可以使用,如图九所示,随便找一个目录编辑一个hello源代码。
# p9 c  T" n8 e  K8 S/ M: f$ A% i( u  `! E8 q1 z2 t
& H. f4 ^5 ^; u3 A8 `

* X! x% k2 ~  |% V2 r! O* k, l5 `1 I- w9 ?( t ! t8 p0 ^& H1 t4 u+ J2 E8 a# B

+ |+ \& Y/ c6 M3 t2 W   编辑好hello.c文件后,保存退出。然后使用交叉编译器对hello.c进行编译,并生成可执行文件hello,如图11所示。' X" R9 p2 \4 t4 M& X5 [+ f
% h; v. ]4 U3 I* D7 U. D6 d* K! L) A5 a

$ {& M7 _5 L$ D; L4 T" [+ @* F1 I3 _3 Q' [5 d0 b
   这里生成的hello文件并不能像gcc编译出来的文件那样直接使用“./hello”命令执行并显示内容, 如图12所示,因为它是一个二进制文件,只能下载到开发板上执行!
& z; ?0 a& |& s0 f! R$ P3 a9 q, ]5 b! U" G1 b. J* z; O/ Z
$ p" g' J2 |6 \: M

$ n+ h8 H+ Z! }3 E    至此,搭建交叉编译环境步骤结束。
( L  ]2 N6 f* n0 w- N8 ~, ~, f! w
  • TA的每日心情
    慵懒
    2020-6-13 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-11-6 15:30 | 只看该作者
    图文解说嵌入式交叉编译环境的搭建过程
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 20:09 , Processed in 0.187500 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表