历史上的今天
返回首页

历史上的今天

今天是:2025年01月03日(星期五)

正在发生

2020年01月03日 | 安装配置arm-linux-gcc

2020-01-03 来源:eefocus

在linux平台上安装好的基础上,开始配置arm-linux-gcc,使其正常工作

一,安装前准备

1,下载并安装arm-linux-gcc

arm-linux-gcc-4.2.1的版本在http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/这里可以下载,最新版arm-linux-tools-20080623.tar.gz这个可能是4.2.4的版本,因为下面有编译4.2.4的方法还有相应的代码包,build-arm-linux-4.2.14,此版本由于过大,我没有下载。

下面的这个是ARM官方给的下载链接http://www.codesourcery.com/gnu_toolchains/arm/download.html,然后将HOST选择为IA32 GNU/Linux,点击下载就可以了。不过前缀为arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu而不是arm-linux-。。。

       在友善之臂官方网站http://www.arm9.net/download.asp下载arm-linux-gcc4.4.3。

2,删除之前安装有旧版本,执行

 [root@localhost ~]# rm -rf /opt/arm

3,对新版本arm-linux-gcc-4.4.3进行解压(注意,如果我们加上了-C,那么就会自动解压到/usr/local/arm/这个目录下),但是友善之臂按照下列方式解压,不会解压到/usr/local/arm/目录下的,这是因为友善之臂把/usr/local/arm/目录修改成了 /opt/FriendlyARM/toolschain/,除非自己在把它修改过来

[root@localhost ~]# tar -ivxzf /smbroot/arm-linux-gcc-4.4.3.tar.gz  -C /

4,修改配置文件,将arm-linux-gcc添加到环境变量中,因为arm-linux-gcc的命令是在/usr/local/arm/4.4.3/bin下,其目的通过对全局变量绑定使之能够在任意一个目录下能够执行该命令。

打开设置文件

[root@localhost opt]# vi /etc/profile

在打开的文件的

# Path manipulation
if [ "$EUID" = "0" ]; then
        pathmunge /sbin
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
        pathmunge /usr/local/arm/4.4.3/bin
fi
或者在文件末尾添加

export PATH=$PATH:/usr/local/arm/4.4.3/bin

保存退出

5,立即使新的环境变量生效,不用重启电脑

[root@localhost opt]#  source /etc/profile

[root@localhost opt]# 

6,检查是否将路径加入到PATH:

[root@localhost opt]# echo $PATH

显示的内容中有/usr/local/arm/4.4.3/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。

7,测试是否安装成功

首先,执行find命令查询一下arm-linux-gcc的位置

[root@localhost ~]# find / -name arm-linux-gcc

/opt/arm/toolschain/4.4.3/bin/arm-linux-gcc
[root@localhost ~]# 

可以看到arm-linux-gcc的位置与环境变量中设定的路径一致

接下来查询arm-linux-gcc的版本

[root@localhost bin]# arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1) 
[root@localhost bin]# 

可以看到arm-linux-gcc的版本号,至此,arm-linu-gcc已成功安装。

 二,测试

1,在终端中编写test.c测试程序

[root@localhost ~]# vi test.c
[root@localhost ~]# arm-linux-gcc test.c -o test
/opt/arm/toolschain/4.4.3/bin/../libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /opt/arm/toolschain/4.4.3/lib/libppl_c.so.2)
/opt/arm/toolschain/4.4.3/bin/../libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /opt/arm/toolschain/4.4.3/lib/libppl.so.7)
[root@localhost ~]# 

用以下命令查看

[root@localhost ~]# strings /usr/lib/libstdc++.so.6|grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_FORCE_NEW
[root@localhost ~]# 
可以看到libstdc++.so.6的最高版是GLIBCXX_3.4.8,而不是GLIBCXX_3.4.9,因此需要对libstdc++.so.6进行升级

方法一,参照这篇文章的做法http://wenku.baidu.com/view/ba4f4e222f60ddccda38a01a.html

直接下载较高版本的库libstdc++.so.6.0.10,网址http://download.csdn.net/source/1670346

先删除libstdc++.so.6

[root@localhost ~]# rm /usr/lib/libstdc++.so.6

rm:是否删除 符号链接 “/usr/lib/libstdc++.so.6”? y

[root@localhost ~]# 

然后将下载的libstdc++.so.6.0.10复制到/usr/lib/目录下面

[root@localhost ~]# cp /smbroot/libstdc++.so.6.0.10 /usr/lib/

[root@localhost ~]# 

再建立符号链接

[root@localhost ~]# ln -s /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6

[root@localhost ~]# 

检验是否替换完成

[root@localhost ~]#  strings /usr/lib/libstdc++.so.6|grep GLIBCXX

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_FORCE_NEW

GLIBCXX_DEBUG_MESSAGE_LENGTH

[root@localhost ~]# 

重新测试交叉编译是否能用

[root@localhost ~]# arm-linux-gcc test.c -o test

[root@localhost ~]# 

编译成功,执行

[root@localhost ~]# ./test

bash: ./test: cannot execute binary file

[root@localhost ~]

方法二,(参照网上搜来的办法,还没尝试)

下载最新版本glibc-2.13.tar.gz 包含libstdc++.so.6的库,

然后编译安装glibc 

wget  http://ftp.gnu.org/gnu/glibc/glibc-2.13.tar.gz

下载glibc-linuxthreads

wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.13.tar.gz

解压
tar -zxvf glibc-2.13.tar.gz

cd glibc-2.13

tar -zxvf ../glibc-linuxthreads-2.3.2.tar.gz

cd ..

./glibc-2.13/configure --prefix=/usr --disable-profile --enable-add-ons --libexecdir=/usr/lib --with-headers=/usr/include

make

make install

注意点:

1、要将glibc-linuxthreads解压到glibc目录下。

2、不能在glibc当前目录下运行configure。

 三、工具使用

1,编译工具arm-linux-gcc

例如arm-linux-gcc hello.c -o hello

2,反汇编工具arm-linux-gcc 

例如arm-linux-objdump -D -S hello

3,elf文件查看工具arm-linux-readelf

arm-linux-readelf  -a hello (查库所有库)

arm-linux-readelf -d hello (查看动态链接库)

参考文章

http://wenku.baidu.com/view/ba4f4e222f60ddccda38a01a.html

Tekkaman Ninja 博主的文章在Fedora 下建立 ARM-Linux 交叉编译环境 

李白博主的文章crosstool安装详解

*****************************************************************************

运行hello : ./hello

  bash: ./hello: cannot execute binary file(无法运行的2进制文件,因为生成的是arm下的2进制文件 );


推荐阅读

史海拾趣

华大北斗(Allystar)公司的发展小趣事

在电子行业中,华大北斗(Allystar)公司以其卓越的技术实力和市场表现脱颖而出,其发展历程中充满了许多引人注目的故事。以下是关于华大北斗发展起来的五个相关故事:

一、华大北斗的南迁之旅

华大北斗的发展史上,一个重要的节点是2016年的南迁。当时,华大北斗主动选择深圳作为新的研发总部所在地,这是基于深圳电子制造业的雄厚基础和良好的创新环境。在短短几个月内,华大北斗完成了研发环境的选址与装修、研发团队的组建以及实验设备的部署,展现了其高效的执行力。这一举措得到了深圳市政府及各级领导的高度关注与认可,华大北斗也被列为深圳市重点引进的战略项目。

二、北斗芯片技术的突破

华大北斗在北斗芯片技术方面取得了重大突破。公司成功研发出支持北斗三号信号体制的多系统多频高精度SoC芯片,这一成果在芯片多频定位方面取得了重要进展。该芯片集成了射频、基带、处理器、存储器等单元,不仅大幅缩小了芯片尺寸,还优化了功耗,实现了单芯片双频北斗高精度定位一体化SoC解决方案。这一技术的突破为北斗应用的自主可控提供了关键支持,推动了北斗产业化、国际化、规模化应用的进程。

三、高精度芯片进入共享单车市场

随着共享经济的兴起,共享单车市场蓬勃发展。华大北斗凭借其高精度芯片技术,成功进入了共享单车市场。其高精度芯片为共享单车提供了精准的定位服务,有效提升了用户体验和车辆管理效率。这一成功应用不仅展示了华大北斗技术的市场竞争力,也为其在更多领域的应用提供了广阔的空间。

四、双频北斗手机的面市

基于华大北斗双频北斗芯片研发的全球首款双频北斗手机的面市,是华大北斗发展历程中的又一里程碑。这款手机的推出,标志着北斗导航技术在智能手机领域的成功应用,也展示了华大北斗在推动北斗产业化进程中的积极作用。双频北斗手机的出现,不仅提升了用户体验,也为北斗导航技术的普及和推广做出了贡献。

五、斩获香港环球创新奖

2023年,华大北斗荣获首届香港环球创新奖年度创新大奖,这是对其在北斗导航芯片领域技术创新和产业化应用的高度认可。这一奖项的获得,不仅提升了华大北斗的品牌形象和市场影响力,也为其在未来的发展中注入了强大的动力。华大北斗将继续坚持技术创新,针对行业应用的不同需求,用领先的技术研发和应用能力推动北斗产业的高质量规模化发展。

这些故事只是华大北斗发展历程中的一部分,但它们足以展现出华大北斗在电子行业中的技术实力和市场竞争力。华大北斗将继续秉持创新精神,不断推动北斗导航技术的发展和应用,为电子行业的进步做出更大的贡献。

Gespac Inc公司的发展小趣事

对于快速充电IC(bq2002)电路,网友可能还会有多种问题,以下是一些常见问题及其回答:

一、电路设计相关问题

  1. BQ2002的BAT引脚如何正确接入电池电压?
    • 回答:BQ2002的BAT引脚用于接收电池电压的取样信号。通常,电池电压会经过一个电阻分压网络后接入BAT引脚,以确保BQ2002能够正确检测电池电压。电阻分压网络的输入电阻不应小于200kΩ,以避免对电池电压造成过大影响。
  2. 如何设置BQ2002的充电速率?
    • 回答:BQ2002的充电速率可以通过TM引脚进行设置。当TM引脚接地时,充电速率为1C(即电池容量的1倍)。此外,根据数据手册,TM引脚的不同电平还可能对应不同的充电速率,如C/2或2C,但具体设置需参考具体的数据手册或应用指南。
  3. BQ2002的CC引脚如何控制充电电流?
    • 回答:BQ2002的CC引脚用于控制充电电流的开关,而不是直接调节充电电流的大小。CC引脚有两种状态:高阻态和接地态。当CC引脚为高阻态时,充电电流可以流动;当CC引脚接地时,充电电流被抑制。充电电流的大小通常由外部恒流源(如LM317等)的电阻设置决定,与CC引脚的状态无关。

二、功能实现与调试问题

  1. 为什么BQ2002没有进入快速充电模式?
    • 回答:BQ2002没有进入快速充电模式可能由多种原因造成,如电池电压或温度不符合快速充电条件、TS引脚电压不在正常范围内、或外部电路设计问题等。建议检查电池电压和温度是否满足快速充电条件,同时检查TS引脚电压是否介于0.25VCC和0.4VCC之间(或1.25V和2.0V之间),并确认外部电路设计无误。
  2. BQ2002在充电过程中突然停止充电怎么办?
    • 回答:BQ2002在充电过程中突然停止充电可能是由于电池过热、电池电压过高或外部电路故障等原因造成的。建议检查电池温度是否过高,电池电压是否超出BQ2002的承受范围,并检查外部电路是否有短路或断路等故障。如果问题依旧存在,可能需要更换BQ2002芯片或重新设计外部电路。
  3. 如何调整BQ2002的充电截止电压?
    • 回答:BQ2002的充电截止电压通常是通过外部电路设计来调整的。具体方法可能因电路设计而异,但一般可以通过调整与BAT引脚相连的分压电阻的阻值来改变BQ2002检测到的电池电压值,从而调整充电截止电压。需要注意的是,在调整充电截止电压时,应确保电池不会因过充而损坏。

三、其他常见问题

  1. BQ2002支持哪些类型的电池?
    • 回答:BQ2002通常支持多种类型的可充电电池,如镍氢电池、锂离子电池等。但具体支持的电池类型可能因BQ2002的版本或制造商而有所不同。因此,在使用BQ2002进行电池充电时,应参考具体的数据手册或应用指南以了解支持的电池类型。
  2. BQ2002的功耗如何?
    • 回答:BQ2002的功耗通常较低,但具体功耗值可能因工作条件(如输入电压、输出电流、环境温度等)的不同而有所变化。在设计电路时,应充分考虑BQ2002的功耗对系统整体性能的影响,并采取相应的措施来降低功耗。

以上是针对快速充电IC(bq2002)电路的一些常见问题及其回答。需要注意的是,由于BQ2002的具体应用可能因电路设计、电池类型等因素而有所不同,因此在实际应用中应参考具体的数据手册或应用指南以获取准确的信息。

ACT [Advanced Crystal Technology]公司的发展小趣事

ACT(Advanced Crystal Technology)公司是一家专注于晶体技术的企业。以下是该公司发展的五个相关故事:

  1. 公司成立与起步阶段: ACT公司成立于1984年,总部位于美国加利福尼亚州。创始人致力于研究和开发高性能的晶体材料和晶振产品。公司最初是一家小型的研究型企业,致力于满足军事和航空航天领域对高精度晶振的需求。

  2. 技术创新和产品拓展: 随着市场需求的增长和技术进步,ACT公司不断进行技术创新,并扩展了产品线。公司推出了一系列高精度、高稳定性的晶振产品,覆盖了频率范围广泛的应用,包括通信、医疗、工业控制等领域。

  3. 市场拓展和国际化发展: ACT公司积极开拓国内外市场,并与全球各地的客户建立了合作关系。公司的产品不仅畅销于美国本土市场,还远销至欧洲、亚洲等国家和地区。通过与国际合作伙伴的合作,ACT逐步实现了国际化发展战略。

  4. 质量控制和技术支持: ACT公司注重产品质量和技术支持,建立了严格的质量控制体系和售后服务体系。公司拥有一支专业的研发团队和技术支持团队,为客户提供定制化的解决方案和技术支持,确保产品的稳定性和可靠性。

  5. 未来发展展望: ACT公司将继续致力于晶体技术领域的研发和生产,不断推出更先进、更高性能的晶振产品,以满足客户在不断变化的市场需求。公司将加强与客户的合作,深化技术创新,提升产品品质和服务水平,努力成为行业内的领先企业。

顺芯(Everest-semi)公司的发展小趣事

随着技术的不断进步,顺芯公司意识到只有不断创新才能在激烈的市场竞争中立于不败之地。因此,公司加大了在研发方面的投入,积极引进高端人才,并与国内外知名高校和研究机构建立了合作关系。在XXXX年,顺芯公司成功研发出了一款具有自主知识产权的高性能数模混合芯片,填补了国内市场的空白,并获得了多项专利。

EBG RESISTORS LLC公司的发展小趣事

作为一家有社会责任感的企业,EBG RESISTORS LLC公司积极履行环保责任。他们采用环保材料和生产工艺,减少生产过程中的废弃物排放。同时,公司还积极参与公益活动,回馈社会。这种负责任的态度赢得了客户和社会的广泛赞誉。

Cyrix Corp公司的发展小趣事

1999年,Cyrix再次被威盛电子(VIA)收购。这次收购后,Cyrix所生产的CPU产品上开始出现了两个商标:VIA和Cyrix。这种双标现象反映了Cyrix在被收购后的地位变化。随着时间的推移,Cyrix的商标逐渐淡出市场,最终被彻底放弃。

问答坊 | AI 解惑

RealView MDK 3.24评估版已正式发布

软件大小:99.14M 下载地址:http://www.realview.com.cn/down-list.asp?id=584 注意:MDK中国版例程服务包请前往http://www.realview.com.cn/down-list.asp?id=585下载 RealView MDK 3.24更新说明 ================== 1. ...…

查看全部问答>

选择D题加入QQ群,一起讨论吧~

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 选择D题的请进我们的群22373240  …

查看全部问答>

关于单片机发射红外信号的问题

最近在做毕业设计,要求发射红外信号,得知红外信号是38K的载波PAM调制形成的,现在是用的定时器中断9us一次再在中断处理中实现PAM,但是在Protues里面显示的波形却是40us的。请问这是怎么回事?请问各位大牛有什么更好的办法实现上述要求。谢谢。…

查看全部问答>

求救高手,一个通信耦合问题!

问题是这样的:我现在要把一个“密室”里的音视频信号采集以后传输出来,信号采集传感器装在一个小车上,平时小车在“密室”预装的轨道上来回移动,轨道铺到密道口,密道是“S”形的,周围是1.8m厚的水泥墙,不能用有线通信,但是用无线的话信号也 ...…

查看全部问答>

wince6下能不能用ACESS数据库?

如题。。wince6下能不能用ACESS数据库? 做个CE5下用EVC写ACESS比较麻烦。。 CE6能不能直接用VS2005连ACESS?…

查看全部问答>

串口驱动中的一个问题

编译出现以下的错误: BUILD: [00:0000000078:PROGC ] Building LINK Pass in D:\\WINCE600\\PLATFORM\\LPC32XX\\src\\drivers\\SERIAL\\ directory. BUILD: [01:0000000089:PROGC ] Linking D:\\WINCE600\\platform\\LPC32XX\\target\\ARMV4I\\d ...…

查看全部问答>

印刷的参考手册哪里能买到?680多页

                                 电子版的不方便,需要反复看,英文的最好…

查看全部问答>

有两个恒流源的运放电路不太理解,希望请教一下大家

书上说左边的电路Io=Vin/R2,我能理解到根据负反馈,运放工作于虚短的状态,R2上的电压为Vin,根据KCL定理,Vin/R2=Io+Ir1(FET 源漏极电流),书里没有说为什么可以忽略这个源漏极电流,想请教一下大家。 另外右边的电路,是引入了正反馈,不能用虚 ...…

查看全部问答>