arm gcc linux,Linux模拟器
大家好,关于arm gcc linux很多朋友都还不太明白,今天小编就来为大家分享关于Linux模拟器的知识,希望对各位有所帮助!
arm-none-linux-gnueabi交叉工具链与arm-linux-gcc 有区别吗
eabi标准的要好些,可能arm-linux-gcc就是arm-none-linux-gnueabi的一个链接
终于,郁闷已久的问题攻破了,用了三种配置交叉编译的方法,最终在开发板上实现成功了,现在想一想,有的时候真的也是运气。
之前已经试验过使用arm-linux-gcc-3.4.1配置交叉编译编译环境,配置成功了,在开发板上失败了~
后来使用脚本创建交叉编译环境(crosstool-0.43),配置成功了(这个用了相当长的时间),在开发板上失败了~
终于,在一个偶然的机会(其实是浏览无数网页后),我终于找到了一个好的方法,并成功在开发板上运行。先说一下网上的一些方法,有些所谓的默认安装了一些程序,但是在实际运行时发现根本没有安装,而且很多地方不知道该如何安装。再有就是文章一上来就说安装什么什么软件,但是在网上搜根本找不到。只能说很多人只转载文章,根本没有试验过。但是我还是幸运的找到了一个靠谱的文章
根据上面的做法,我成功了,在此小做总结。
首先下载工具链,幸好这篇文章给出了这个网站,要不还不知道要找多久。
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。
就会显示你希望见到的输出了。。。。。。
首先,从下面的地址下载工具链
等待下载完成后,将工具链解压到/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这样的文件,因为,你并不总是需要它们来做交叉编译。比如,你仅仅希望编译运行在开发主机上的程序时。
这样,工具链就准备好了。
如何安装arm-linux-gcc
1,下载并安装arm-linux-gcc
arm-linux-gcc-4.2.1的版本在这里可以下载,最新版arm-linux-tools-20080623.tar.gz这个可能是4.2.4的版本,因为下面有编译4.2.4的方法还有相应的代码包,build-arm-linux-4.2.14,此版本由于过大,我没有下载。
下面的这个是ARM官方给的下载链接,然后将HOST选择为IA32 GNU/Linux,点击下载就可以了。不过前缀为arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu而不是arm-linux-。。。
在友善之臂官方网站下载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已成功安装。
gcc和arm-linux-gcc是什么关系区别是什么
gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的是适用于linux系统的可执行二进制文件。可执行程序其实就是一堆的0101二进制机器码。这些机器码代表什么含义只有机器本身能理解。所以你用gcc编译出来的可执行程序只有在linux系统下面可以运行。举个例子你的可执行程序里面有一句01011.这句在linux下面可能是吃饭的意思,但是在windows下面可能01011是撒尿的意思。那你说linux的可执行程序放在window下面能正常运行吗?肯定不能嘛。你要的目的是吃饭,它帮你执行撒尿很显然就不对了。同样的可能01011在ARM下面的意思是睡觉。不同系统的机器码含义是不一样的。所以你在linux系统下面写的代码要怎样才能在ARM系统上面跑呢。这就需要用到交叉编译。arm-linux-gcc是什么意思?就是告诉你的编译器,我编写的环境是linux,但是我希望生成的可执行程序是在arm上面跑的。这就是交叉编译。编写环境和执行环境分离的一种手段。