linux系统嵌入式编译环境,Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解...

Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4.4.3 交叉编译器下载 见这篇文章http://www.linuxidc.com/Linux/2011-05/35906.htm

安装前的絮叨

首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式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平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。

安装步骤

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

bbb1e139c3ca556da70ed7d4e5c6e664.png

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

126f37e01e33954b4b6c6be5c840a4d9.png

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

d3f8984e750e53e826e173bcff54f06c.png

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

16fa47461baa645d8a245f47bd68b2a4.png

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

26bda8616897aee9801fef65d413c32b.png

编写完保存就好了

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

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

f06a1ed7ae9d025203fad88b715588c0.png

6、使用命令: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

6faa9124ab5aa0fb68125804a64122ad.png

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

7165c808654006adbce858050e33a07d.png

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

517ea9605a6ec618a5e84993d0807f99.png

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

1a217b28de483cb026775d338c26b2d8.png

使用命令:arm-linux-gcc hello.c -o hello 看是否编译成功

1c3ff3c4a7c2645753d683a0648f4d79.png

可见成功生成了二进制文件。

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JUnit 5 –下一代JUnit的初步了解

2月初, JUnit 5(又名JUnit Lambda)团队发布了一个alpha版本。 由于JUnit 4是我工具箱中使用最频繁的项目之一,因此我认为值得一看下一个主要版本。 我试用了最新版本,并记下了我在这里发现值得注意的更改。 安装JUni…

Geany——Python配置

Geany是一个很不错的编辑器,操作很简单,这里记录一下Geany的入手设置(在下是一个Python程序猿,就以Python为例): 1:新建:选择 下拉菜单中的 main.py ,然后就能生成Pyth…

linux权限drwx,linux权限基础知识详解

祥哥今天整理一下Linux系统中的权限到底是什么?什么是775?什么又是777?664又代表了什么?1.查看权限可以使用ls -l命令ls -l我们以root文件夹为例来说明:drwx------.2 root rootd:这个代表是目录,也就是文件…

cargo maven_用于集成测试的Maven Cargo插件

cargo maven在项目生命周期中,非常普遍的需求是设置集成测试。 幸运的是,Maven在默认构建生命周期的以下阶段(来自Maven 文档 )具有对这一确切方案的内置支持: 集成前测试 : 执行集成测试之前所需的操作。…

linux菜单系统,Linux修改grub菜单

1. 保留上一次 grub 菜单选项1.1 问题每次开机时,大部分 Linux 发行版的 grub 菜单都是定位在首选项位置(即当前系统选项位置)。这就导致如果我们电脑安装了多个系统,那么每次开机进入其他系统都要重新选择 grub 菜单选项。而我们一般都是一段时间固定使…

zookeeper zoo.cfg配置文件

一、zookeeper的配置文件 zoo.cfg 配置文件是我们安装zookeeper的时候复制 重命名出来的文件命令: cp zoo_smaple.cfg zoo.cfgzkServer.sh 获取执行进入zookeeper 查看配置文件cd /myapp/zookeeper/conf执行命令 查看配置文件信息命令:vim zoo.cfg这是…

与Spring和Maven签订合约优先SOAP服务

1.简介 在本教程中,我们将学习使用JAX-WS,Spring和Maven实施合同优先的SOAP服务应用程序。 这是使用合同优先还是代码优先方法的更多设计决定。 在开发基于SOAP的Web服务应用程序时使用应用合同优先的方法最显着的好处是,可以在对合同进行必…

linux 下c内存管理,linux内存管理之malloc

对于内核的内存管理,像kmalloc,vmalloc,kmap,ioremap等比较熟悉。而对用户层的管理机制不是很熟悉,下面就从malloc的实现入手.( 这里不探讨linux系统调用的实现机制. ) ,参考了《深入理解计算机系统》和一些网上的资料…

jqGrid 常用方法

方法名参数返回值说明addJSONDatadatanone使用传来的data数据填充表格。使用方法: var mygrid jQuery(”#”grid_id)[0]; var myjsongrid eval(”(”jsonresponse.responseText”)”); mygrid.addJSONData(myjsongrid); myjsongrid null; jsonresponse null;addR…

新生必会的linux命令,jstat命令详解

导读Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控…

基于jsf的项目_JSF基于事件的交流:新派方法

基于jsf的项目在上一篇文章中 ,我们学习了基于Observer / Event Listener和Mediator模式的基于事件的通信。 由于它们的缺点,我想展示基于事件的通信的更有效方法。 我们将从Google Guava EventBus开始,最后以CDI (Java EE平台的上…

linux 天文软件,新闻|开源新闻速递:天文软件 Stellarium 0.15.0 发布

今日关注Stellarium 0.15.0 发布。这是一款全世界最棒的免费、开源、跨平台的天文软件应用,用户可以通过该软件来观看实时的星星、行星还有星云。最新版本进行了非常多的功能完善,修复了若干bug,新增了许多新特性。比如更新了AstroCalc工具&a…

linux javaweb环境单价,linux(centos)下Java Web环境开发

一、安装jdk百度搜索jdk,进入http://www.oracle.com/technetwork/java/javase/downloads/index.html找到自己需要版本的jdk的Linux压缩包;复制出这个压缩包的下载地址(尽量先点击下载,然后在下载的界面复制出资源的链接)在服务器的合适位置创…

带有Java Util日志记录的Java 8延迟调用

在博客文章“在Log4j2中更好地执行非日志记录器调用”中 ,我介绍了可以在Log4j 2中使用的方法,这些方法可以减少或避免在基于指定日志级别实际上根本未记录的日志语句中调用方法。 作为讨论的一部分,我介绍了Log4j 2对使用lambda表达式的基于…

python对象分类

1 python对象分类 所有的Python对象都拥有三个特性:身份,类型和值 身份: 每一个对象都有一个唯一的身份标识自己。任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址类型: 对象的类型决定了对象可以…

怎样用u盘linux安装ntp协议,电脑中怎么配置NTP服务

NTP服务器是用来使计算机时间同步化的一种协议,可提供高精准度的时间校正,而且能通过加密确认来防止恶毒的协议攻击。下面让学习啦小编为大家介绍如何在电脑中配置NTP服务来实现局域网内设备的时间同步。电脑中怎么配置NTP服务1、先关闭Windows系统自带的…

SetGID 权限

一、SetGID针对文件的作用 1、只有可执行的二进制程序才能设置SGID权限 2、命令执行者要对该程序拥有 x (执行)权限 3、命令执行在执行程序的时候,组身份升级为该程序的属组 4、SetGID权限同样只在该程序执行过程中有效,也就是说组…

nosql的数据服务_使用NoSQL实现实体服务–第2部分:合同优先

nosql的数据服务现在该开始使用NoSQL项目对SOA实体服务进行编码了,并且正如我所承诺的,我将从Web服务的合同开始。 看一下本系列的第1部分 。 这种从Web服务合同定义开始的技术是面向服务的体系结构实现的“合同优先”方法的核心,并具有许多技…

weblogic双机热备部署linux,WebLogic应用在集群环境下的一些基本知识【转载】

4.2.1 基本概念1.硬件的cluster和WebLogic的cluster不是一回事,硬件做的是冷备份,对用户的session,用户请求的负载均衡等的处理是做不到 的,而且一般硬件的双机热备也不是时时的备份,而是间隔一段时间再将主…

vmware中centos6.4突然无法进入图形界面解决方法

今天遇到vmvare中centos6.4进度条走完了仍然没有进入图形界面,在网上找到了解决方法记录如下: 1. 按CtrlAltF5并输入root账号密码进入命令界面 2. vim /etc/inittab 打开/etc/inittab文件,并将文件最后id:5改为id:3,即将运行等级…