作者askacis (ASKA)
看板LinuxDev
标题Re: [问题] 请问有关arm-none-linux-gnueabi编译器 …
时间Wed Dec 9 17:46:28 2009
http://wiki.debian.org/ArmEabiPort#ChoiceofminimumCPU
今天大概知道原因了,根据上面网址的说法似乎
EABI只能用在armv4t以上的指令集?
我的FA526刚好是最旧的armv4,看起来似乎是这边所造成的?
另外一点是arm-none-linux-gnueabi-gcc预设的版本是v5
,所以在编译的时候要加上-march=armv4t的方式去指定指令集版本(like s3c2410)
好玩的地方是用arm-none-linux-gnueabi-gcc -march=armv4t的方式去编译
busybox,则编译出来的ELF tag会显示Tag_CPU_arch: v4T;但如果我用
-march=armv4去编译,虽然不会有错但是他的ELF tag却是会显示v5TE
似乎也说明了armv4真的不支援?
再来我不信邪,看了一下vmlinux的tag 却发现显示Tag_CPU_arch: v4
於是乎我把kernel_source/arch/arm/Makefile里面有关EABI的CFLAGS照抄
写了一支自己的hello world并且不link成执行档来看ELF TAG,
就发现他显示为v4了...
只是当我让他link出来执行档,该Tag又会变成v5TE,真不知道Kernel
那边linker是怎麽办到的XD
※ 引述《askacis (ASKA)》之铭言:
: 文章有点长,还要请各位包含^^
: 小弟本来运作良好的平台环境如下:
: CPU是ARM9系列(FA526)
: Kernel 2.6.21
: arm-linux-gcc (GCC) 3.4.4
: busybox-1.13.4(static link)
: Kernel Menuconfig中
: []Initial RAM filesystem and RAM disk 有开启
: 由於有另外一个平台(不同CPU)采用的编译器版本是arm-none-linux-gnueabi-gcc
: 於是乎小弟兴起了想将我这个平台用这个编译器编译的想法
: 上网google了一下发现要用此编译器编译kernel config中需要开启
: Kernel Features --->
: [ ] Use the ARM EABI to compile the kernel
: 以及
: Floating point emulation --->
: [ ] NWFPE math emulation
: 当我将之开启,一开始不知为何在编译过程中最後linking的会发生__aeabi_llsl之类
: 的函式未定义的问题,後来在 /kernel_source/arch/arm/lib/
: 里面找到问题点:
: 即是在这个资料夹里面有好几个档名一样的.C 及.S, C档只有函式宣告以及extern
: 而.S档是函式真正的定义...所以我将所有的C档杀掉之後让make可以吃到真正的
: 函式之後可以成功建出zImage(不晓得这样做是对的吗?)
: 当我开心的烧录并且开机之後进到要开始执行/init时(init_post())就没有反应了,
: 我trace了一下发觉最後kernel是停在kernel_execve()
: [kernel_source/arch/arm/kernel/sys_arm.c]
: 里面的一段组合语言(似乎是在做跳转到userspace的动作?)
: 我的/init是一个script 主要内容如下:
: ######################################################
: #!/bin/busybox ash
: /bin/busybox mount -t sysfs /dev/sys /sys
: /bin/busybox mount -t proc /proc
: /bin/busybox mount -t devpts /dev/pts
: # Populate /dev according to /sys
: /bin/busybox mdev -s
: /bin/busybox --install -s
: /linuxrc
: exec /sbin/init "$@" </dev/console >/dev/console 2>&1
: ######################################################
: 执行档busybox我用arm-none-linux-gnueabi-gcc重build过,也试过
: 将另外一个平台上可以执行的busybox放到我的板子上结果也是不行
: 另外也试过自己用写一个简单的hello world用该编译器编译并命名为
: busybox放到板子上结果也是不行的...
: 不晓得是因为kernel开了EABI的关系吗?板上如果有大大有相关的经验可以告诉我
: 大概是哪边出了问题,小弟感激不尽 ^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.244.105.125
1F:→ askacis:後来用arm-none-linux-gnueabi-gcc -v查到了,原来下armv4 12/10 17:25
2F:→ askacis:的时候 compiler在处理时还是会自动帮我link armv5函式库 12/10 17:26
3F:→ askacis:而kernel那边是因为gcc 下了-c参数,然後自己呼叫linker去 12/10 17:27
4F:→ askacis:做连结...总而言之,armv4在userspace看起来是没办法了.... 12/10 17:27
5F:→ askacis:後来还是解了XD,用下面的option去编译busybox就可以work了 12/11 17:28
6F:→ askacis:-march=armv4t -Wl,--fix-v4bx-interworking 12/11 17:28
7F:→ askacis: -Wa,--fix-v4bx 12/11 17:29