對於ARM加載文件系統出現 Kernel panic - not syncing: Attempted to kill init!

轉自:http://blog.csdn.net/jackyard/article/details/8612724

有時加載文件系統時,會出現下面的錯誤:

VFS: Mounted root (nfs filesystem) on device 0:12.

Freeing init memory: 124K

Kernel panic - not syncing: Attempted to kill init!

從上面看,文件系統已經加載成功,但還是不能正常啓動init進程,這是什麼原因了?

大多數是因爲編譯的內核和編譯的根文件系統的編譯工具鏈不一致。

解塊辦法就是在內核編譯時把EABI的選項選中就可以了。

同時用arm-linux-gcc 4.0.0以上的編譯器做出都 文件系統老是報這個錯 ,
而用rm-linux-gcc 3.x.x 版本都都不會
Kernel Features  --->
            [*] Use the ARM EABI to compile the kernel                   
            [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTA)
把這個選上就可以了


附:


1。什麼是ABI
ABI,application binary interface (ABI),應用程序二進制接口。
既然是 接口,那就是某兩種東西之間的溝通橋樑,此處有這些種情況:
A。應用程序 <-> 操作系統;
B。應用程序 <-> (應用程序所用到的)庫
C 。應用程序各個組件之間

類似於API的作用是使得程序的代碼間的兼容,ABI目的是使得程序的二進制(級別)的兼容。

2。什麼是OABI 和 EABI
OABI中的O,表示“Old”,“Lagacy”,舊的,過時的,OABI就是舊的/老的ABI。
EABI中的E,表示“Embedded”,是一種新的ABI。
EABI有時候也叫做GNU EABI。
OABI和EABI都是專門針對ARM的CPU來說的。

3。EABI的好處 / 爲何要用EABI
A。支持軟件浮點和硬件實現浮點功能混用
B。系統調用的效率更高
C。後今後的工具更兼容
D。軟件浮點的情況下,EABI的軟件浮點的效率要比OABI高很多。

4。OABI和EABI的區別
兩種ABI在如下方面有區別:
A。調用規則(包括參數如何傳遞及如何獲得返回值)
B。系統調用的數目以及應用程序應該如何去做系統調用
C。目標文件的二進制格式,程序庫等
D。結構體中的 填充(padding/packing)和對齊。
E。
OABI:
* ABI flags passed to binutils: -mabi=apcs-gnu -mfpu=fpa
* gcc -dumpmachine: arm-unknown-linux
* objdump -x for compiled binary:

private flags = 2: [APCS-32] [FPA float format] [has entry point]
* "file" on compiled Debian binary:
ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), for GNU/Linux 2.2.0, stripped
* "readelf -h | grep Flags""
Flags: 0x0
EABI:
* ABI flags passed by gcc to binutils: -mabi=aapcs-linux -mfloat-abi=soft -meabi=4
* gcc -dumpmachine: arm-unknown-linux-gnueabi
* objdump -x for compiled binary:
private flags = 4000002: [Version4 EABI] [has entry point]
* "file" on compiled binary (under Debian):
ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), for GNU/Linux 2.4.17, stripped
* "readelf -h | grep Flags""
Flags: 0x4000002, has entry point, Version4 EABI

[參考]

http://www.arm9.net/download-arm-linux-gcc-4.3.2.asp

1。ABI/EABI/OABI

http://blog.csdn.net/hongjiujing/archive/2008/07/21/2686556.aspx
2。
Why ARM's EABI Matters
http://www.chineselinuxuniversity.net/articles/1255.shtml
 
3.[PDF] The new arm ABI (EABI) and Debian armel port
下載此文件 (29 個頁面)
4ArmEabiPort http://wiki.debian.org/ArmEabiPort
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章