导航:首页 > 编程系统 > armlinuxgccmarch

armlinuxgccmarch

发布时间:2023-08-06 22:03:47

❶ 按要求写linux命令

1、 gcc -o hello hello.c
2、 arm-linux-gcc -o hello hello.c
3、./hello
4、mount -t nfs 192.168.1.117:/home/myname /mnt/nfs
5、chmod o+x hello
6、gedit Makefile
7、make menuconfig
8、分多步:
首先,用 make vmlinux 得到 vmlinux, 然后:
a、将vmlinux文件中的调试信息、符号表除去生成一个Image的镜像文件
/usr/local/arm/3.4.1/bin/arm-linux-obj -O binary -R .note -R .comment -S vmlinux arch/arm/boot/Image

b、将Image镜像用gzip压缩工具进行压缩,得到piggy.gz的文件
gzip -f -9 < arch/arm/boot/compressed/../Image > arch/arm/boot/compressed/piggy.gz

c、piggy.S文件中直接将上面一步的piggy.gz文件包含在其中,将piggy.S编译得到piggy.o文件
/usr/local/arm/3.4.1/bin/arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.piggy.o.d
-nostdinc -isystem /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/include
-D__KERNEL__ -Iinclude -mlittle-endian -D__ASSEMBLY__ -mapcs-32 -mno-thumb-interwork
-D__LINUX_ARM_ARCH__=4 -march=armv4 -mtune=arm9tdmi -msoft-float
-c -o arch/arm/boot/compressed/piggy.o
arch/arm/boot/compressed/piggy.S

d、将piggy.gz head.o misc.o三个文件链接成文内核镜像
/usr/local/arm/3.4.1/bin/arm-linux-ld -EL --defsym zreladdr=0x30008000 --defsym params_phys=0x30000100
-p --no-undefined -X /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/libgcc.a -T arch/arm/boot/compressed/vmlinux.lds
arch/arm/boot/compressed/head.o
arch/arm/boot/compressed/piggy.o
arch/arm/boot/compressed/misc.o
-o arch/arm/boot/compressed/vmlinux

e、再次去除掉镜像中的符号、注释、调试信息的内容
/usr/local/arm/3.4.1/bin/arm-linux-obj -O binary -R .note -R .comment
-S arch/arm/boot/compressed/vmlinux
arch/arm/boot/zImage
至此得到 zImage
9、make moles
10、make distclean

❷ 一个版本的arm-liunx-gcc 可以通用吗

是通用的,对于不同的ARM体系,是通过设置不同的编译选项来设置的。arm11比arm增加了一些指令集。回
比如ARM9可以答设置 --march=armv4t --mcpu=arm920t
ARM11可以设置 --march=armv6 --mcpu=arm1176jz-s

❸ 怎么安装arm-linux-gcc4.8

CrossBuild很蛋疼的,以目标内核2.6.x为例,我们需要以下基本包:
binutils-2.23.1.tar.bz2
gcc-4.8.2.tar.bz2

glibc-2.18.tar.bz2
glibc-linuxthreads-2.5.tar.bz2
gdb-7.6.1.tar.bz2
linux-2.6.34.14.tar.xz
mpfr-3.1.2.tar.bz2
mpc-1.0.1.tar.gz
gmp-5.1.3.tar.bz2
因为编译过程很费时,你要在bash配置文件中直接声明环境变量:
vim ~/.bashrc
export TARGET=arm-linux-gnueabi
export PREFIX=/usr/local/arm/4.8.2
export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PATH:$PREFIX/bin
#source ~/.bashrc
以便下次工作继续恢复现场。

工具链创建:

先来安装mpfr、mpc、gmp。#号表示在root下工作。
#tar -xjf gmp-5.1.3.tar.bz2 &&cd gmp-5.1.3
#mkdir build && cd build && \
../configure --prefix=/usr/local/gmp --build=x86_64-linux-gnu && \
make && make install

OK,gmp done,Next,搞搞mpfr:
#tar -xjvf mpfr-3.1.2.tar.bz2 && cd mpfr-3.1.2
#../configure --build=x86_64-linux-gnu --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp &&\
make &&make install

OK, mpfr done, Next we build mpc:
#tar -xzvf mpc-1.0.1.tar.gz && cd mpc-1.0.1
mkdir build && cd build
#../configure --build=x86_64-linux-gnu --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr &&\
make &&make install

After, we need to linux-kernel-headers:
xz -d linux-2.6.34.14.tar.xz
tar -xvf linux-2.6.34.14.tar
cd linux-2.6.34.14
make menuconfig
这里我们不作任何个性,直接保存退出。
#make include/linux/version.h
#mkdir -p $TARGET_PREFIX/include
#cp -r ./include/linux/ $TARGET_PREFIX/include
#cp -r ./include/asm-generic/ $TARGET_PREFIX/include
#cp -r ./arch/arm/include/asm/ $TARGET_PREFIX/include
然后编译binutils:
#tar -xjvf binutils-2.23.1.tar.bz2
#cd binutils-2.23.1
#mkdir build && cd build
#../configure --prefix=$PREFIX --target=$TARGET
#make
#make install
$TARGET得到一大堆工具,我就不一一介绍了。
接下来为ARM平台编译不带链接库的原初编译器,这一步称作恐龙蛋生小鸡。

解开tar -xjvf gcc-4.8.2.tar.bz2,并把mpfr-3.1.2.tar.bz2、mpc-1.0.1.tar.gz、gmp-5.1.3.tar.bz2也解开,去掉版本号放到gcc源目录下。
先删除 gcc下上述几个包,如果存在的话:
rm -rf mpfr-3.1.2 mpc-1.0.1 gmp-5.1.3
然后解包,并移入gcc下:
#tar -xjvf gmp-5.1.3.tar.bz2
#mv gmp-5.1.3 gmp
#mv ./gmp ./gcc-4.8.2

#tar -xjvf mpfr-3.1.2.tar.bz2
#mv mpfr-3.1.2 mpfr
#mv ./mpfr ./gcc-4.8.2

#tar -xzvf mpc-1.0.1.tar.gz
#mv mpc-1.0.1 mpc
#mv ./mpc ./gcc-4.8.2

可以编译gcc了:
#cd gcc-4.8.2
#mkdir build && cd build
#../configure --prefix=$PREFIX --target=$TARGET --without-headers --enable-languages=c --disable-threads --with-newlib --disable-shared --disable-libmudflap --disable-libssp --disable-decimal-float &&\
make all-gcc && make install-gcc && make all-target-libgcc &&\
make install-target-libgcc
如果没出错的话,这里的预编译就快搞好了,擦把汗先。
#tar -xvf glibc-2.18.tar.xz
#tar -xvf glibc-linuxthreads-2.5.tar.bz2 --directory=./glibc-2.18
# cd glibc-2.18
# mkdir build
# cd build
# CC=$TARGET-gcc
#export CFLAGS="-g -O2 -march=arm"
# ln -s /usr/local/arm/4.8.2/lib/gcc/arm-linux-gnueabi/4.8.2/libgcc.a /usr/local/arm/4.8.2/lib/gcc/arm-linux-gnueabi/4.8.2/libgcc_eh.a
这里编译好的glibc就是for arm的glibc了。

创建config.cache配置文件
# vim config.cache
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_arm_tls=yes

# ../configure --host=$TARGET --target=$TARGET --prefix=$TARGET_PREFIX --enable-add-ons --disable-profile --cache-file=config.cache --with-binutils=$PREFIX/bin --with-headers=$TARGET_PREFIX/include
#make all
#make install
预编译环境搭好,我擦已经下班了,明天继续。
好了,为正式开始 arm 铸刀:

# cd gcc-4.8.2/build/
# rm -rf *
# ../configure --prefix=$PREFIX --target=$TARGET --enable-shared --enable-languages=c,c++
# make
# make install
这就是arm版的gcc了

编译gdb
# tar -xvf gdb-7.6.1.tar.bz2
# make
# make install

创建链接
# cd $PREFIX/bin
# ln -s arm-linux-gnueabi-addr2line arm-linux-addr2line
# ln -s arm-linux-gnueabi-ar arm-linux-ar
# ln -s arm-linux-gnueabi-as arm-linux-as
# ln -s arm-linux-gnueabi-c++ arm-linux-c++
# ln -s arm-linux-gnueabi-c++filt arm-linux-c++filt
# ln -s arm-linux-gnueabi-cpp arm-linux-cpp
# ln -s arm-linux-gnueabi-elfedit arm-linux-elfedit
# ln -s arm-linux-gnueabi-g++ arm-linux-g++
# ln -s arm-linux-gnueabi-gcc arm-linux-gcc
# ln -s arm-linux-gnueabi-gcc-4.6.3 arm-linux-gcc-4.6.3
# ln -s arm-linux-gnueabi-gcov arm-linux-gcov
# ln -s arm-linux-gnueabi-gdb arm-linux-gdb
# ln -s arm-linux-gnueabi-gdbtui arm-linux-gdbtui
# ln -s arm-linux-gnueabi-gprof arm-linux-gprof
# ln -s arm-linux-gnueabi-ld arm-linux-ld
# ln -s arm-linux-gnueabi-ld.bfd arm-linux-ld.bfd
# ln -s arm-linux-gnueabi-nm arm-linux-nm
# ln -s arm-linux-gnueabi-obj arm-linux-obj
# ln -s arm-linux-gnueabi-objmp arm-linux-objmp
# ln -s arm-linux-gnueabi-ranlib arm-linux-ranlib
# ln -s arm-linux-gnueabi-readelf arm-linux-readelf
# ln -s arm-linux-gnueabi-run arm-linux-run
# ln -s arm-linux-gnueabi-size arm-linux-size
# ln -s arm-linux-gnueabi-strings arm-linux-strings
# ln -s arm-linux-gnueabi-strip arm-linux-strip
这把可以杀人了,开始为你树莓派编译软件吧。

❹ arm-linux-gcc 和 arm-elf-gcc 的区别

在基于ARM的嵌入式系统开发中,常常用到交叉编译的GCC工具链有两种:
arm-linux-*和 arm-elf-*,两者区别主要在于使用不同的C库文件。arm-linux-*使用
GNU的Glibc,而arm-elf-*一般使用 uClibc/uC-libc或者使用REDHAT专门为嵌入式系统
的开发的C库newlib.Glibc。uClibc/uC-libc以及 newlib都是C语言库文件,只是所应
用的领域不同而已,Glibc是针对PC开发的,uClibc/uC-libc是与Glibc API兼容的小型
化C语言库,实现了Glibc部分功能。

关于uClibc/uC-libc的说明,详见如下:

There are two libc libraries commonly used with uClinux. uC-libc and
uClibc. They are quite different despite their similar names. Here is a
quick overview of how they are different.

uC-libc is the original library for uClinux. It was based on sources
from the Linux-8086 C library which was part of the ELKs project with m68000
support added by Jeff Dionne and Kenneth Albanowski. It is a fairly complete
libc implementation, however, some of the API's are a little non-standard
and quite a few common libc routines are not present. Currently it has
stable support for m68000, ColdFire and ARM (Non-MMU) architectures. It was
primary design goal is to be small and light weight. It does try to conform
to any standards, although its API tries to be compatible with most libcs,
it is not always exactly the same.

The uClinux distribution provides an environment that can compile using
either uC-libc or uClibc depending on your needs. For m68000 and Coldfire
platforms it is generally better to chose uC-libc as it supports shared
libraries and is the most commonly used libc for these CPUs. uClibc also
works quite well with almost all platforms supported by the distribution.
Which libc you choose to use will be decided by your requirements

uClinux有两个经常使用的libc库:uC-libc和uClibc。虽然两者名字很相似,其实有差
别,下面就简单的介绍一下二者的不同之处。uC -libc是最早为uClinux开发的库,是
Jeff Dionne和Kenneth Albanowski为在EKLs项目中支持m68000在Linux-8086 C库源码
上移植的。uC-libc是一个完全的libc实现,但其中有一些api是非标准的,有些libc的
标准也没有实现。uC-libc稳定地支持 m68000,ColdFire和没有MMU的ARM。其主要设计
目标是“小”、"轻",并尽量与标准一致,虽然它的API和很多libc兼容,但是似乎并
不像它期望的那样和所有标准一致。

uClibc就是为了解决这个问题从uC-libc中发展出来的。它的所有API都是标准的(正确
的返回类型,参数等等),它弥补了uC-libc中没有实现的libc标准,现在已经被移植到
多种架构中。一般来讲,它尽量兼容glibc以便使应用程序用uClibc改写变的容易。
uClibc能够在标准的 VM linux和uClinux上面使用。为了应用程序的简洁,它甚至可以
在许多支持MMU的平台上被编译成共享库。Erik Anderson在uClibc背后做了很多的工
作。uClibc支持许多系列的处理器:m68000,Coldfire,ARM,MIPS,v850, x86,
i960,Sparc,SuperH,Alpha,PowerPC和Hitachi 8。不断增加的平台支持显示uClibc
能够很容易的适应新的架构。uClinux发行版提供了环境能够让你选择使用uC-libc或是
uClibc编译。对于m68000和Coldfire平台来说,选择uC-libc还是稍微好一点,因为它
支持共享库,而共享库是这些cpu经常使用的 libc.uClibc也几乎和所有的平台都能很
好的工作。选择哪种libc取决于你的需求。

newlib 是一个用于嵌入式系统的开放源代码的C语言程序库,由libc和libm两个库组
成,特点是轻量级,速度快,可移植到很多CPU结构上。newlib实现了许多复杂的功
能,包括字符串支持,浮点运算,内存分配(如malloc)和I/O流函数(printf,fprinf()
等等)。其中libc提供了c 语言库的实现,而libm提供了浮点运算支持。

在为ARM交叉编译gcc编译器时,对gcc指定不同的配置选项时,使用的C语言库就不同,
gcc编译器默认使用Glibc,也可以使用 uClibc/uC-libc(基本兼容Glibc API),当使用
--with-newlib时,gcc编译器不使用Glibc。当没有交叉编译Glibc时,可以使用
--with-newlib禁止连接Glibc而编译bootstrap gcc编译器。从gcc源目录下的
config/arm中的t-linux和t-arm-elf中可以看出,不同的--target也影响gcc连接C语言
库,t-linux(--target=arm-linux)默认使用Glibc,-arm-elf(--target=arm-elf)使用
- Dinhibit_libc禁止连接Glibc,这时我们就可以使用newlib等其他C语言库编译GCC工
具链。

虽然GCC工具链配置了不同的的C语言库,但由于这些C语言库都可以用来支持GCC,它们
对核心数据的处理上不存在较大出入。因而arm-linux-* 和 arm-elf-*区别主要表现在
C语言库的实现上,例如不同系统调用,不同的函数集实现,不同的ABI\启动代码以及
不同系统特性等微小的差别。

arm-linux-*和 arm-elf-*的使用没有一个绝对的标准,排除不同库实现的差异,gcc可
以编译任何系统。arm-linux-*和 arm-elf-*都可以用来编译裸机程序和操作系统,只
是在遵循下面的描述时系统程序显得更加协调:

arm-linux-*针对运行linux的ARM机器,其依赖于指定的C语言库Glibc,因为同样使用
Glibc的linux而使得arm-linux-*在运行linux的ARM机器上编译显得更加和谐。

arm-elf-*则是一个独立的编译体系,不依赖于指定的C语言库Glibc,可以使用newlib
等其他C语言库,不要求操作系统支持,当其使用为嵌入式系统而设计的一些轻巧的C语
言库时编译裸机程序(没有linux等大型操作系统的程序),如监控程序,bootloader等

能使得系统程序更加小巧快捷。

Linaro prebuilt toolchain does support both hard and soft floating
point. You can get it from https://launchpad.net/linaro-toolchain-binaries/+milestone/2012.08 try: ./arm-linux-gnueabihf-gcc -print-multi-lib

The default configure is --with-arch=armv7-a --with-tune=cortex-a9
--with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb

To use soft floating, you need options: -marm -march=armv4t -mfloat-abi=soft.

In your case, please try to change -march=armv5 to "-march=armv4t"

If you want to change to configure to cortex-a8 and armv5. You need
* Change cortex-a9 to cortex-a8 in
samples/linaro-arm-linux-gnueabihf/crosstool.config
* Change armv4t to armv5 in
contrib/linaro/patches/gcc/linaro-4.7-2012.08/multilib.patch,

Then follow the instructions to rebuild the toolchain
(contrib/linaro/doc/README.txt)

BTW: crosstool-ng-linaro does not support multilib for eglibc. It uses
the prebuilt sysroot from Ubuntu Precise. If it does not work for you,
please use the latest crosstool-ng from http://crosstool-ng.org/.

❺ arm-linux-gcc 编译汇编出现fatal error:invalid -match =option:armv4t

已经提示你了,非法选项:-match =option:armv4t ,你找到makefile,把这个flag去掉

阅读全文

与armlinuxgccmarch相关的资料

热点内容
法那科英制螺纹数控怎么编程 浏览:430
恋舞最新升级奖励表 浏览:149
四川语音交友恋爱app有哪些 浏览:528
iphone6美国卖多少 浏览:887
圆弧刀东槽如何编程 浏览:870
js怎么单击改变标签里的文字 浏览:760
实例配置文件里的sid是什么 浏览:43
ps文件模糊 浏览:192
叶檀财经推出过什么购物APP 浏览:875
linux硬盘检测 浏览:431
如何用路由器降低网络延迟 浏览:601
aix分区root密码 浏览:439
运动鞋买鞋上什么app 浏览:904
NSA工具下载 浏览:918
函数代码在哪个文件夹 浏览:213
微信应用怎么代码添加快捷方式 浏览:371
用数据说话是最有力的什么 浏览:27
图片文件被锁定无法打开 浏览:768
wr886nv2升级 浏览:490
移动硬盘视频文件无法删除 浏览:417

友情链接