7.4.2. 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

注解

执行结果中包含 [Requesting program interpreter: /system/bin/linker64] ,经检查文件系统中linker64并非在此 路径下. 修改linker64的路径后可解决.