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的路径后可解决.