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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
' y4 w; Z. v. F' i3 L
    电脑系统:win7系统。虚拟机系统:workstation6.5 。虚拟机安装的linux版本:fedora9.0。内核:linux2.6.25  。
3 v$ t) y& Y  q- M. r: ~6 T
' o7 n: f: U  |* h5 M) y4 T" _) e    首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。
4 h2 _% }5 |2 i3 b# S8 i5 J0 @/ x# m3 z
   交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,ARM-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。% ^4 N; \0 O9 }8 t: [- @: \

# i5 L9 R$ [2 B( p   那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。
  Z. @% u' o3 q( p) ]6 f9 x" W- A
$ t0 H( X& O/ R7 h   现在正是介绍交叉编译工具链的安装步骤,我使用的交叉编译工具链是arm-linux-gcc-4.4.3,把它放在linux系统的路径是图一:: v' m8 c8 U& m/ J9 o1 r5 f
+ }8 |+ R: U% m

, L; N* z! e: `3 y+ l# E   如图一所示,在linux系统的路径/home/song/share下放了交叉编译工具链arm-linux-gcc-4.4.3的压缩包,另一个版本的不用。有的人可能会问到怎么把这个压缩包弄到虚拟机的linux的系统的,我是通过samba服务从主机复制到虚拟机的,这里的share文件夹就是我samba服务器的工作目录,多了不说,这不是重点。
) Z" w6 ~4 C& d9 u" ]
8 F; ?/ B" d1 S) d$ {/ L   然后通过命令mkdir embedded 建立一个arm-linux-gcc的安装目录,如图二所示。当然安装路径和目录名称“embedded”可以依自己的喜好而定。
# `- z$ ]( Q7 K+ y- E9 a
8 M: H, g' b7 j% C. a9 W& d7 Q
% _: E6 M: K8 v3 k
/ r0 y  C- o% Y: L6 q  y
7 f/ t/ s0 x; o" g6 R; L: B4 @
4 }9 @4 o7 a& f/ H  l. L5 H   然后通过命令将share文件夹下的arm-linux-gcc-4.4.3.tar.gz复制到这里的embedded文件夹下,如图四所示。当然这里你也可以不进行这一步我这是为了方便以后管理,将arm-linux-gcc安装到embedded文件夹下,方便以后寻找。) r% R2 w# F3 G

2 [; h, C6 T$ `( c7 A
$ k9 Y0 y. A( A1 \8 f" @# |2 J+ M3 r% u
     然后使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz将embedded文件夹下的arm-linux-gcc-4.4.3.tar.gz解压缩安装到当前目录下 ,如图五所示。
  T7 S! V: ~( Y: T# E  G, M4 w3 [8 S4 w/ c8 ^  [7 p

; j3 B. }* t* K
; p7 b- s$ ^6 }1 u3 {; h0 p9 G      执行完解压缩命令,就已经将交叉编译工具链arm-linux-gcc-4.4.3安装到linux系统上了,这里默认安装到了图六所示的路径上。3 S* P; m( U5 v

7 O- G- X; W, g- L' w
2 Y9 `1 r: Z' N
$ M* n/ ^) h1 r' O     接下来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具。记下图六中的安装路径,使用图七中的命令:vi /etc/profile 编辑profile文件,添加环境变量。6 j8 x  r) L4 Q8 q7 r3 S' s/ P
0 M" d: E/ C: P" G

- v7 S: b. P% G- a
2 S! T- S6 c$ b2 r- A" p( q      在profile中的位置处,添加图八所示的红线标注的一行,路径就是图六中的红线标注的路径后面加上/4.4.3/bin。8 }4 n6 C9 v6 d+ ~
5 j* R! r& |) f! Q

3 x' W* t. S8 C2 X
4 R8 i% [9 z. A   图八中的路径一定是你自己的安装路径,可以使用pwd命令查找一下那个bin目录的路径。添加完路径后,保存退出。接下来使用命令:source /etc/profile,是修改后的profile文件生效,如图九所示。
# w/ [, a* |( V" {' G- X" r7 a$ b: M% Z+ u1 B; d

/ I: A$ Q  j* d' R/ @1 `# T7 T5 u4 i) B& y
   然后,使用命令:arm-linux-gcc -v查看当前交叉编译链工具的版本信息,如图九中的红线标注第③行所示。很明显从图九可以看到,如果不执行第②步,则查看版本信息不成功。4 c1 G* z+ P8 l, B
2 C; R6 ?; s! @+ Y8 K: N
   然后验证交叉编译工具链是否安装成功并且可以使用,如图九所示,随便找一个目录编辑一个hello源代码。
0 h! p: G+ }3 J5 X" P7 G$ g5 A* M6 x7 z- v( y8 v$ ]) F3 G# v

& s2 m! Y$ O( H( T; T! D$ O
9 I% Q- X8 Z5 T8 E# s
1 @9 A- D: w* M5 \! K$ E; u* S. h) V' D6 O. ?' B$ r  ~
   编辑好hello.c文件后,保存退出。然后使用交叉编译器对hello.c进行编译,并生成可执行文件hello,如图11所示。8 `/ J% W/ n0 N$ ?" L( O* X( R" V0 T
5 P" }, [9 e% m" m; ]3 w3 }

" `3 u; F# i0 t  z9 F8 L$ S2 L+ j3 D! c1 u+ C6 T
   这里生成的hello文件并不能像gcc编译出来的文件那样直接使用“./hello”命令执行并显示内容, 如图12所示,因为它是一个二进制文件,只能下载到开发板上执行!
! @! V7 E9 }- J
7 D) s% k6 ?% G$ D. p! Y8 U: {( b
3 e8 L! y  w. F- P
8 Y1 N; f- I/ o0 ?* y    至此,搭建交叉编译环境步骤结束。
/ P: K" m) n6 r( i. j/ C0 a2 I$ M
  • 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-25 00:55 , Processed in 0.203125 second(s), 26 queries , Gzip On.

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

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

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