当前位置:首页 » 编程软件 » 嵌入式交叉编译环境搭建

嵌入式交叉编译环境搭建

发布时间: 2025-04-07 12:23:52

1. 如何建立针对arm-linux的交叉编译环境

采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。
linux下的交叉编译环境重要包括以下几个部分:
1.对目标系统的编译器gcc
2.对目标系统的二进制工具binutils
3.目标系统的标准c库glibc
4.目标系统的linux内核头文件
交叉编译环境的建立步骤
一、下载源代码 下载包括binutils、gcc、glibc及linux内核的源代码(需要注意的是,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径。
二、编译binutils 首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。
三、配置linux内核头文件
首先执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架构,因为缺省架构为主机的cpu架构),这一步需要根据目标机的实际情况进行详细的配置,笔者进行的实验中目标机为HP的ipaq-hp3630 PDA,因而设置system type为SA11X0,SA11X0 Implementations中选择Compaq iPAQ H3600/H3700。
配置完成之后,需要将内核头文件拷贝到安装目录: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux
四、第一次编译gcc
首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,并使用--disable-threads、--disable-shared、--enable-languages=c参数,然后执行make install。这一步将生成一个最简的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可。
五、交叉编译glibc
这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录;或者,也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。
configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。
六、第二次编译gcc
运行configure,参数设置为--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。
运行make install。
到此为止整个交叉编译环境就完全生成了。
几点注意事项
第一点、在第一次编译gcc的时候可能会出现找不到stdio.h的错误,解决办法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS变量的设定中增加-Dinhibit_libc和-D__gthr_posix_h。

2. 姹傚姪锛岁t鍦╨inux涓嬶纴宓屽叆寮忎氦鍙夌紪璇戠幆澧冮厤缃锛

绛:1銆佸彲浠2銆丵tCreator鍙鏄涓涓闆嗘垚寮鍙戝伐鍏凤纴杩欎釜鐗堟湰闅忔剰锛岀绣涓娄笅灏卞彲浠ワ纴Qte涓嶆槸鐢ㄦ渶鏂帮纴钥屾槸链濂界敤璺熶綘鍦↙inux寮鍙板紑鍙戜竴镙风殑銆

棣栧厛瑕佸湪Linux涓嬩氦鍙夌紪璇恸te镄勫簱锛岀劧钖庡啀灏哃ib杩欎簺鏂囦欢绉绘嶅湪𨱒垮瓙涓婏纴链钖庨氲繃浜ゅ弶缂栬疟濂界殑搴揿幓缂栬疟浣犲湪pc涓婄紪鍐欑殑绋嫔簭锛屾斁鍒版澘瀛愪笂杩愯!鍏充簬浜ゅ弶缂栬疟QT镄勬枃绔狅纴缃戜笂鍙浠ユ悳鍒板緢澶氥

3銆乄IN7骞冲彴镄勪氦鍙夌紪璇戝伐鍏峰畨瑁呮瘆杈冮夯鐑︼纴涓嶆帹钻愪娇鐢锛岀洿鎺ュ湪Linux铡讳笅涓涓鍒浜轰氦鍙夊伐鍏峰寘锛岀洿鎺ヨВ铡嫔氨濂姐伞

铡诲弸锽勭殑瀹樼绣锛屾垨鍏朵粬缃戠珯涓嬭繖绫荤殑宸ュ叿瑙夊缑浣犺佸厛鐞呜В浠涔埚彨浜ゅ弶缂栬疟寮鍙!!!!!

3. Ubuntu 嵌入式交叉编译环境搭建

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译,这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器(cross compiler)。

安装前的絮叨,首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交银丛知叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。 那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。

压缩包arm-linux-gcc-4.4.3.tar.gz存放在一个目录下,这个目录就是你等会解压缩的目录,以后这个目录就不能随便删掉了,我的存放路径是 /home/song/software,如下图,记住这个路径,等会还会用到。

使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz将software文件夹下的arm-linux-gcc-4.4.3.tar.gz解压缩安装到当前目录下如下图

通过下图可以看锋消到解压成功了,并且解压后的文件存放在了/home/song/software/opt/FriendlyARM/toolschain/4.4.3文件夹下,如下图所示,这个存放路径可得记住,如下图

接下来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具。记下上一步中的安装路径,使用命令:vim /etc/profile 编辑profile文件,添加环境变量。

在profile中最后一行添加:export PATH=$PATH:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin这个路径就是那个bin目录所在的路径,可能你的不一样,按照你实际的目录填就可以了,如下图32行, 编写完退出并保存

使用命令:source /etc/profile 使环境变量生效

在终端上输入命令arm-linux再按Tab键,可以看到下图,说明环境变量设置成功了

使用命令:arm-linux-gcc -v 会出现下面的错误提示:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: 15: exec: /home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-gcc: not found

意思是出现这种问题的原因是由于Ubuntu12.04用的是64位的,解决方法就是使用命令:sudo apt-get install ia32-libs 装一些32位的库。

待安装完32位的库之后,再使郑镇用命令:arm-linux-gcc -v,这一次就成功了,如下图

验证,编译一个hello.c文件

使用命令:arm-linux-gcc hello.c -o hello 看是否编译成功 可见成功生成了二进制文件。

总结:其实在安装过程中,会出现各种各样的错误,一般就是库文件安装不完整,大家可以把错误信息直接复制,到网上搜索一下,一般都能解决,这里希望大家在学习Linux时多一点耐心。

4. 如何利用Eclipse C/C++搭建嵌入式ARM开发环境

由于觉得在Linux下不方便编写代码,所以准备在windows上搭建开发环境,其实在Linux上也搭建好了,但是使用起来不是很人性化,尤其是文件比较多的时候就很麻烦。下面就选择在windows上用Eclipse做开发。【后来发现还是需要在Linux下编程,因为Windows下没法包含Linux下的一些头文件,所以下面也介绍Linux环境下的Eclipse搭建】。

Windows下的Eclipse环境搭建:

1. 下载并安装Eclipse C/C++

2. 下载交叉编译器,之前在Linux都用的arm-linux-gcc,后来使用TI的ti-sdk-am335x-evm-08开发包,里面安装的编译器是arm-none-linux-gnueabi-gcc,都是能用的,所以我也选择了arm-none-linux-gnueabi-gcc作为交叉编译器,下载windows平台的编译器,然后安装。

下载地址:http://www.veryarm.com/arm-none-linux-gnueabi-gcc

3. 开启Eclipse的ssh远程登录功能,我分别开启了Beaglebone Black和Linux的ssh terminal,操作起来很是方便。

4. 新建C项目工程“hello”,编写简单的hello代码,注意选择交叉编译选项,交叉编译器前缀“arm-none-linux-gnueabi-”交叉编译器路径选择arm-none-linux-gnueabi-gcc安装的路径“…Linuxin”,在此文件夹下有arm-none-linux-gnueabi-gcc.exe、arm-none-linux-gnueabi-gdb.exe等,还有cs-make.exe,这里需要把“cs-make.exe”改成“make.exe”,因为Eclipse不认cs-make.exe编译的时候会报错的。

图文安装参考:http://www.linuxidc.com/Linux/2016-03/129577.htm

5. 调试(构建Ctrl+B)的时候会自动生成makefile,生成编译结果,放到ARM嵌入式平台运行就可以了,成功执行并输出“hello”。

Linux下的Eclipse环境搭建:

官网下载http://www.eclipse.org/downloads/

发下是收费的

sudo apt-get install eclipse直接就安装了

然后sudo eclipse –s启动后发现“窗口->打开视图”里面没有ssh远程登录的选项,网络一下发现它是Eclipse的插件,查询下这个软件:sudo apt-cache search Remote System Explorer,发现一个eclipse-rse,就是它了,然后直接安装:sudo apt-get install eclipse-rse

重启eclipse

新建工程时发现没有C/C++工程,只有Java工程,再次搜索sudo apt-cache search eclipse C/C++

发现其中一条:

eclipse-cdt - C/C++ Development Tools for Eclipse

继续安装:

sudo apt-get install eclipse-cdt

再次重启eclipse,就有了C/C++项目,高兴ing。

新建C工程,添加编译器:

arm-none-linux-gnueabi-

/opt/toolschain/4.4.3/bin

编写hello程序,编译OK,在BBB上执行,成功!

5. CMake搭建编译环境总结

目录


前言
交叉编译环境搭建是嵌入式开发者面对的常见挑战,主要涉及在目标平台(如Arm板)上编译代码的过程。常见的编译工具包括Makefile和CMake。本文将总结CMake在搭建编译环境时的常用技巧。

入门案例:单个源文件


代码路径: 代码路径链接

工程结构


在开始使用CMake之前,需要构建工程结构,包括文件、目录和CMakeLists.txt文件。


工程编译


完成CMakeLists.txt文件编写后,执行cmake命令(指定路径),然后使用make命令编译。


多个源文件


代码路径: 代码路径链接

工程结构


当工程包含多个文件和目录时,使用一个CMakeLists.txt文件可能难以维护。因此,建议按照模块结构,为每个主要模块创建单独的CMakeLists.txt文件,将文件和目录按层次嵌套管理。


优点


顶层CMakeLists.txt负责设置工程属性、交叉工具和包含子路径的CMakeLists.txt文件。子路径下的CMakeLists.txt主要关注编译文件的路径、目标生成路径和编译目标。


配置示例


配置顶层CMakeLists.txt时,应包含工程属性、交叉工具设置和包含子路径的CMakeLists文件。子路径下的CMakeLists.txt应关注头文件路径、目标生成路径和编译目标。


其他用法


配置局部变量、设置全局变量、获取全局变量、指定目标输出路径、设置环境变量等。


环境设置和编译器配置


设置环境变量、编译器路径、依赖库路径、头文件路径、编译器编译选项、CMakeLists路径嵌套等。


编译警告和报错设置


使用GCC设置编译警告和报错选项,例如打开所有警告并将其视为错误。


交叉编译环境设置


配置默认库、头文件搜索路径、交叉编译工具链、浮点运算处理方式、动态库编译、静态库编译和可执行文件编译。


6. 嵌入式ARM linux操作系统中如何构建交叉开发环境

这个问题相当专业了,之前我去周立功那边了解过的。

按照以下步骤进行安装:

1) 安装32位的兼容库和libncurses5-dev库

在安装交叉编译工具之前需要先安装32位的兼容库和libncurses5-dev库,安装32兼容库需要从ubuntu的源库中下载,所以需要在Linux主机系统联网的条件下,通过终端使用如下命令安装:

vmuser@Linux-host ~$sudo apt-get install ia32-libs

若Linux主机系统没有安装32位兼容库,在使用交叉编译工具的时候可能会出现错误:

-bash: ./arm-fsl-linux-gnueabi-gcc: 没有那个文件或目录

在终端中使用如下命令则可以安装libncurses5-dev库。

vmuser@Linux-host ~$sudo apt-get install libncurses5-dev

如果没有安装此库,在使用make menucofig时出现如下所示的错误:

*** Unableto find the ncurses libraries or the

*** required headerfiles.

*** 'makemenuconfig' requires the ncurses libraries.

***

Installncurses (ncurses-devel) and try again.

***

make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1

make: *** [menuconfig] 错误 2

2) 安装交叉编译工具链

将交叉编译工具“gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2”文件通过U盘的方式拷贝到Linux主机的“/tmp”目录下,然后执行如下命令进行解压安装交叉编译工具链:

vmuser@Linux-host ~$ cd /tmp

vmuser@Linux-host ~$ sudo tar -jxvfgcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 -C /opt/

vmuser@Linux-host /tmp$ # 输入vmuser用户的密码“vmuser”

执行完解压命令后,交叉编译工具链将被安装到“/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0”目录下。交叉编译器的具体目录是“/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin”,为了方便使用,还需将该路径添加到PATH环境变量中,其方法为:修改“/etc/profile”文件,具体操作方法如下:

在终端中输入如下指令

vmuser@Linux-host ~$ sudo vi /etc/profile # 若提示输入密码,则输入“vmuser”

用vi编辑器打开“/etc/profile”文件后,在文件末尾增加如下一行内容:

export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin

文件修改并保存后,再在终端中输入如下指令,更新环境变量,使设置生效。

vmuser@Linux-host ~$source /etc/profile

在终端输入arm-fsl-linux-gnueabi-并按TAB键,如果能够看到很多arm-fsl-linux-gnueabi-前缀的命令,则基本可以确定交叉编译器安装正确,如下图所示。

热点内容
倩女手游手机种菜脚本 发布:2025-04-07 23:59:34 浏览:691
我的世界梦世界小游戏服务器ip 发布:2025-04-07 23:51:34 浏览:361
林肯车门带密码的多少钱 发布:2025-04-07 23:46:12 浏览:883
163服务器ip地址怎么看查询 发布:2025-04-07 23:44:55 浏览:748
phpstudy访问慢 发布:2025-04-07 23:44:53 浏览:25
githubpython项目 发布:2025-04-07 23:42:55 浏览:477
2003iisftp配置 发布:2025-04-07 23:41:25 浏览:408
elseifpython 发布:2025-04-07 23:37:51 浏览:698
md5加密多少位 发布:2025-04-07 23:25:29 浏览:499
安卓手机数据转移到苹果用什么软件 发布:2025-04-07 23:22:17 浏览:504