看板 LinuxDev 關於我們 聯絡資訊
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
askacis:後來用arm-none-linux-gnueabi-gcc -v查到了,原來下armv4 12/10 17:25
askacis:的時候 compiler在處理時還是會自動幫我link armv5函式庫 12/10 17:26
askacis:而kernel那邊是因為gcc 下了-c參數,然後自己呼叫linker去 12/10 17:27
askacis:做連結...總而言之,armv4在userspace看起來是沒辦法了.... 12/10 17:27
askacis:後來還是解了XD,用下面的option去編譯busybox就可以work了 12/11 17:28
askacis:-march=armv4t -Wl,--fix-v4bx-interworking 12/11 17:28
askacis: -Wa,--fix-v4bx 12/11 17:29