debug问题汇总 ================ **init: cannot execve('/system/bin/sh'). No such file or directory** 这个问题是android系统启动过程中,init进程在启动/system/bin/sh console服务时报的错 遇到此类问题,第一反映就是去检查文件系统的该目录下是否存在这个文件,并检查其权限.经检查文件是存在的,而且权限 也是正常的.遇到这种情况一般问题的原因在 ``系统的动态链接器与此应用程序中的动态连接器的名字或路径不对`` ,可以在 你的编译目录下找到对应的文件,并执行 ``readelf -l XXX`` :: yinwg@ubuntu:~/ywg_workspace/prj/android_workspace/tmp_fs/system/bin$ sudo readelf -l sh Elf 文件类型为 DYN (共享目标文件) Entry point 0xb000 There are 12 program headers, starting at offset 64 程序头: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040 0x00000000000002a0 0x00000000000002a0 R 0x8 INTERP 0x00000000000002e0 0x00000000000002e0 0x00000000000002e0 0x0000000000000015 0x0000000000000015 R 0x1 [Requesting program interpreter: /system/bin/linker64] LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x000000000000a184 0x000000000000a184 R 0x1000 LOAD 0x000000000000b000 0x000000000000b000 0x000000000000b000 0x000000000003cb50 0x000000000003cb50 R E 0x1000 LOAD 0x0000000000048000 0x0000000000048000 0x0000000000048000 0x00000000000015c0 0x00000000000015c0 RW 0x1000 LOAD 0x00000000000495c0 0x000000000004a5c0 0x000000000004a5c0 0x0000000000000270 0x0000000000001f38 RW 0x1000 TLS 0x0000000000048000 0x0000000000048000 0x0000000000048000 0x0000000000000000 0x0000000000000000 R 0x40 DYNAMIC 0x0000000000048e80 0x0000000000048e80 0x0000000000048e80 0x00000000000001d0 0x00000000000001d0 RW 0x8 GNU_RELRO 0x0000000000048000 0x0000000000048000 0x0000000000048000 0x00000000000015c0 0x0000000000002000 R 0x1 GNU_EH_FRAME 0x00000000000054f8 0x00000000000054f8 0x00000000000054f8 0x0000000000000db4 0x0000000000000db4 R 0x4 GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 RW 0x0 NOTE 0x00000000000002f8 0x00000000000002f8 0x00000000000002f8 0x0000000000000038 0x0000000000000038 R 0x4 .. note:: 执行结果中包含 ``[Requesting program interpreter: /system/bin/linker64]`` ,经检查文件系统中linker64并非在此 路径下. 修改linker64的路径后可解决.