谁能具体说下 arm-linux-gcc-3.4.1.tar.bz和crosstool-ng具体有什么区别
eabi标准的要好些,可能arm-linux-gcc就是arm-none-linux-gnueabi的一个链接
终于,郁闷已久的问题攻破了,用了三种配置交叉编译的方法,最终在开发板上实现成功了,现在想一想,有的时候真的也是运气。
之前已经试验过使用arm-linux-gcc-3.4.1配置交叉编译编译环境,配置成功了,在开发板上失败了~
后来使用脚本创建交叉编译环境(crosstool-0.43),配置成功了(这个用了相当长的时间),在开发板上失败了~
终于,在一个偶然的机会(其实是浏览无数网页后),我终于找到了一个好的方法,并成功在开发板上运行。先说一下网上的一些方法,有些所谓的默认安装了一些程序,但是在实际运行时发现根本没有安装,而且很多地方不知道该如何安装。再有就是文章一上来就说安装什么什么软件,但是在网上搜根本找不到。只能说很多人只转载文章,根本没有试验过。但是我还是幸运的找到了一个靠谱的文章http://www.adamjiang.com/pukiwiki/index.php?%E7%BC%96%E8%AF%91mini2440%E5%B7%A5%E5%85%B7%E9%93%BE
根据上面的做法,我成功了,在此小做总结。
首先下载工具链,幸好这篇文章给出了这个网站,要不还不知道要找多久。
http://www.codesourcery.com/.../arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
70多M很快就下完了,若不是root用户下,可以将文件解压到home的某个目录下。
tar xjvfo arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /home/..../arm
那么,在这个目录下会生成一个arm-2008q3文件夹。
更改路径不用说了,或者临时或者非临时。我就直接改~/.bashrc了,在最后加:
export PATH=/usr/local/arm-2008q3/bin:${PATH}
ok~现在使你路径生效吧:
source ~/.bashrc
再输入:export CROSS_COMPILE=arm-none-linux-gnueabi-
作用是:当你编译软件的时候,Makefile在大多数情况向会取得CROSS_COMPILE所指定的交叉编译工具。
也可以输入:export CROSS_COMPILE=/usr/local/arm-2008q3/bin/arm-none-linux-gnueabi-
这种种方法是通过绝对路径来指定交叉编译工具,这样做可以更精确的为交叉编译定位,同时可以避免很多错误。你可以通过下面这样的例子指定交叉编译工具的绝对路径。
现在一切就绪,随便编译个hello world.c文件,用arm-none-linux-gnueabi-gcc helloworld.c -o helloworld,生成的helloworld文件通过nfs挂载到板子上。
最最后,在minicom下输入:./helloworld。
就会显示你希望见到的输出了。。。。。。
首先,从下面的地址下载工具链
http://www.codesourcery.com/.../arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
等待下载完成后,将工具链解压到/usr/local/目录,如果你没有编译主机上的root权限的话,你可以将工具链解压到Linux用户的home目录中的某个位置(比如${HOME}/bin)
tar xjvfo arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /usr/local
这个操作将会在/usr/local目录中创建一个么名为arm-2008q3的目录。
接下来,你需要将这个新进添加的工具链的位置添加到PATH变量之中。编译你的~/.bashrc文件,在其中加入新的PATH变量
export PATH=/usr/local/arm-2008q3/bin:${PATH}
使用source命令在当前shell中启用这个变化,这样你就不需要重新登入系统使用新变量了。
source ~/.bashrc
或者直接在shell中使用export对当前shell做同样的操作。
export PATH=/usr/local/arm-2008q3/bin:${PATH}
如果你并不是bash用户,你可以修改你使用的shell所对应的环境设置文件,比如,对于zsh来说,您应该修改~/.zsh文件。或者,你需要在每次登入shell后首先运行上面的export操作。
因为在开发主机上进行交叉编译意味着使用开发主机的能力生成另外一个体系结构上运行的二进制代码,所以,一般来说,你需要编译的软件通常都会接受一个叫做CROSS_COMPILE的变量来指定产生哪个体系结构的代码。所以,配置工具链的最后一个步骤就是设置这个变量。如果你现在使用ls命令查看以下
ls /usr/local/arm-2008q3/bin/
目录的话,你会看到很多以arm-none-linux-gnueabi-开始的可执行文件,而这个共同的前缀就是你需要的CROSS_COMPILE变量。现在,使用export命令设置环境变量
export CROSS_COMPILE=arm-none-linux-gnueabi-
现在,当你编译软件的时候,Makefile在大多数情况向会取得CROSS_COMPILE所指定的交叉编译工具。当然,前提是,这些交叉编译工具在你的PATH变量上。还有一种方法是通过绝对路径来指定交叉编译工具,这样做可以更精确的为交叉编译定位,同时可以避免很多错误。你可以通过下面这样的例子指定交叉编译工具的绝对路径。
export CROSS_COMPILE=/usr/local/arm-2008q3/bin/arm-none-linux-gnueabi-
在大多数情况下,你并不需要将上面的export命令加入~/.bashrc这样的文件,因为,你并不总是需要它们来做交叉编译。比如,你仅仅希望编译运行在开发主机上的程序时。
这样,工具链就准备好了。
一般装crosstool_ng就行了,它包括交叉编译工具。
就是arm的驱动包和cross工具他们的配置都不是很复杂
首先建立工作目录(注意,权限问题所以需要加sudo,后面很多动作都要加):
建立脚本文件
因为本次交叉编译是为了在arm9架构的处理器s3c2440开发板上用,我们要创建的是针对于arm9tdmi架构的arm-linux-gcc,应用crosstool提供的模板:demo-arm9tdmi.sh。
建立配置文件
demo-arm9tdmi.sh脚本文件会访问demo-arm9tdmi.dat和gcc-4.1.0-glibc-2.3.2.dat两个文件,这两个文件是crosstool编译的配置文件。
demo-arm9tdmi.dat文件用于定义内核配置,定义生成工具链的名称(如arm-linux-gcc),以及编译选项,我们只修改生成工具链名称,其他默认
执行脚本
在执行脚本前发生了小插曲,系统中的gcc是gcc-4.4版本的,太过于新以至于编译过程中提示gcc版本太旧(无语,linux的自由带给普通开发者的是无穷的变数与不确定;不统一的版本,各种的不一致不协调。这本身就是一种巨大的障碍,自由之祸)。后参考网上教程编译安装了gcc-3.3.6,注意编译好gcc-3.3.6后,一定要和系统里gcc建立链接,我采取了把原来链接(gcc和gcc-4.4链接一起)删除,然后建立新的链接
然后就是漫长的等待,没有注意时间,应该再一个小时以上。最后,在/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux/bin/下就是生成的新的工具,如arm-linux-gcc arm-linux-g++ 等等。
最后将工具链所在路径添加到环境变量PATH中去,以方便在终端环境下直接调用相应工具
漆侍盐酸: 首先,Linux内核支持多种架构的处理器. 其次,关于移植:打个比方,windows系统都是装在PC机上的,如果你想把这套系统安装在你的智能手机上,那就叫做移植. 在ARM架构的处理器上移植Linux系统就是一个在ARM板上安装Linux内核的过程.首先你要在ARM上烧写一段引导程序(BootLoader),多选用U-Boot,之后对Linux内核进行一定的裁剪定制并生成uImage文件,通过U-Boot下载uImage文件到Flash,同时制作根文件系统.这样,算是完整的在ARM架构上移植Linux的简单过程. 祝你好运.
鹿寨县17574057487: ARM与Linux是什么关系?ARM本身已经有Linux了,还是需要往里烧写Linux??
漆侍盐酸: 我来回答你吧 1. ARM与Linux是什么关系? 就是PC和XP的关系,不过你要注意,ARM7不能运行linux的,因为其不带操作系统的,ARM9 或以上才可以 2. ARM本身已经有Linux了,还是需要往里烧写Linux?很显然,你要往ARM里烧写linux才行...
鹿寨县17574057487: 什么叫ARM+Linux开发?是不是在PC机上写好驱动然后移植到开发板上?查了很多资料都没见说明白 - ?
漆侍盐酸: 当前很多嵌入式设备很多都是基于linux kernel(内核)的当然还有很多其他的嵌入式系统 如ucos ecos 等等.如当前流行的android 系统,他的内核就是linux kernel 再加上google 自己的一些东西.arm+linux 开发 主要就是指针对arm架构的嵌入式开发平台的linux 程序开发.现在除了那些自虐的人不在PC上写代码以外,其他人都再PC上写好代码,通过交叉编译器编译成嵌入式处理器(不一定就是arm 还有其他的如mips )能够执行的程序.再下载到开发板上运行. 开发主要分为三个方面(uboot 的移植)内核开发(设备驱动开发)界面的移植如(QT界面开发)
鹿寨县17574057487: 谁能具体说下 arm - linux - gcc - 3.4.1.tar.bz和crosstool - ng具体有什么区别 - ?
漆侍盐酸: 就是arm的驱动包和cross工具 他们的配置都不是很复杂 首先建立工作目录(注意,权限问题所以需要加sudo,后面很多动作都要加):建立脚本文件 因为本次交叉编译是为了在arm9架构的处理器s3c2440开发板上用,我们要创建的是针对于...
鹿寨县17574057487: 论述ARM - Linux嵌入式系统的基本组成,以及各部分的作用. - ?
漆侍盐酸: ARM-Linux嵌入式系统的基本组成:1、bootloader:BootLoader是在操作系统内核运行之前运行.可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境.2、基...
鹿寨县17574057487: 关于arm - elf - tools和arm - linux - toolchain的区别 - ?
漆侍盐酸: 区别如下:1. arm-linux-*和 arm-elf-*,两者区别主要在于使用不同的C库文件.2. arm-linux-*使用GNU的Glibc,而arm-elf-*一般使用 uClibc/uC-libc或者使用REDHAT专门为嵌入式系统的开发的C库newlib.Glibc.3. uClibc/uC-libc以及 newlib都是C语言库文件,只是所应用的领域不同而已,Glibc是针对PC开发的,uClibc/uC-libc是与Glibc API兼容的小型化C语言库,实现了Glibc部分功能.
鹿寨县17574057487: ARM与Linux的关系? - ?
漆侍盐酸: ARM是处理器架构, Linux是操作系统,二者是土地与农作物的关系.
鹿寨县17574057487: linux和arm - ?
漆侍盐酸: ARM就当作一款超强的单片机,可以单机跑程序,也可加操作系统.如果要加操作系统,我们说操作系统之一就可以选用linux,当然,还有别的可选,比如WinCE,uC/OS等等.当然看你要干什么了,内核一般不用深入研究.C语言一定要会,基于linux下的C,说白了就是换个环境编程.不管写驱动还是应用都要会C,linux要掌握一些基本的命令.如 ls cat cd .. cp ……环境要熟悉.
鹿寨县17574057487: ARM开发具体是干什么的 - ?
漆侍盐酸: ARM开发具体是:工程师使用ARM嵌入式Linux操作系统进行内核编译及文件系统制作,使用相关开发工具进行ARM软、硬件开发设计的专业技术人员. 英国ARM公司是全球领先的半导体知识产权 (IP) 提供商.全世界超过95%的智能手机和...
鹿寨县17574057487: 如何安装arm - linux - gcc - ?
漆侍盐酸: 一般你的开发板会有配套的arm-linux-gcc的压缩文件,拷到的linux环境下解压,编译就行了.编译好了以后设置好环境变量,就可以在宿主机直接执行arm-linux-gcc进行交叉编译了.