看板 LinuxDev 關於我們 聯絡資訊
文章有點長,還要請各位包含^^ 小弟本來運作良好的平台環境如下: 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: 219.87.142.254