Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004


出現這個問題的原因可能如下:

1. rootfs (busybox), kernel 編譯的時候,沒有選中 EABI 選項

可以用 readelf 查看是否有 EABI:

$ arm-linux-gnueabi-readelf -h vmlinux | grep Flags
Flags: 0x5000202, has entry point, Version5 EABI, soft-float ABI
2. 編譯busybox 和 kernel 的工具鏈的體系結構不一樣
我就遇到過這樣的問題, busynox是用 arm a9 gcc 編的, kernel 是用 arm a15 gcc編的,結果,系統boot的時候就報這個錯了。

也可以用 readelf 查看二進制文件的編譯器類型

$ arm-linux-gnueabi-readelf -A vmlinux
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "7-A"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv3
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_enum_size: int
Tag_CPU_unaligned_access: v6
————————————————
版權聲明:本文為CSDN博主「CaspianSea」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/caspiansea/article/details/41838845

 

 
 
 
 
轉載請注明出處:http://blog.csdn.net/qq_26093511/article/details/51841281

 

 
 
 
啟動新內核出現錯誤:Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004

 

查閱內核源碼,才知道exitcode=0x00000004  代表的是 SIGILL (非法指令)

 

出現這個錯誤的原因是交叉編譯器用的是EABI借口,所以內核也要用EABI接口才行

 

book@book-desktop:/work/nfs_root$ arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) 

 

 

 

 

 

Embedded application binary interface (EABI), 即嵌入式應用二進制接口

 

 

 

解決辦法:重新配置內核支持EABI

 

 

 

make menuconfig

 


Kernel Features  --->
     [*] Use the ARM EABI to compile the kernel
     [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM