现在主流的android的设备上都是采用EXT4文件系统,所以今天想在NAND上跑一下EXT4。编译完源码,将sbin下的文件全部拷贝到我的SD卡上,然后将SD。
但是不管如何运行都是报:not found的错误。
/mnt/ext # mount -t ext4 /dev/mtdblock3 /usr/
mount: mounting /dev/mtdblock3 on /usr/ failed: Invalid argument
虽然我是静态编译的,但是不知道还是有两个依赖库。
/e2fsprogs-1.41.14/install/sbin$ XXXXX-linux-readelf -d mkfs.ext4
Dynamic section at offset 0x35020 contains 21 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x200195c
0x0000000d (FINI) 0x20285a0
0x6ffffef5 (GNU_HASH) 0x2000168
0x00000005 (STRTAB) 0x2000efc
0x00000006 (SYMTAB) 0x200062c
0x0000000a (STRSZ) 1116 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0x0
0x00000003 (PLTGOT) 0x203d0f0
0x00000002 (PLTRELSZ) 1064 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x2001534
0x00000011 (REL) 0x2001504
0x00000012 (RELSZ) 48 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x2001474
0x6fffffff (VERNEEDNUM) 2
0x6ffffff0 (VERSYM) 0x2001358
0x00000000 (NULL) 0x0
1.将编译器下面的lib库(因为libpthread.so.0还依赖于其他库,所以把整个库全部拷贝过去了)拷贝到SD中,将SD卡mount到/mnt目录下面
并添加路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/lib
但是运行的时候还是报:not found的错误。
/mnt/ext # mount -t ext4 /dev/mtdblock3 /usr/
mount: mounting /dev/mtdblock3 on /usr/ failed: Invalid argument
2.这下我就无解了。找人帮忙,一个专门搞这方面研究一个哥们。
/home/cuixiaogang/e2fsprogs-1.41.14/install/sbin$ XXX-XXX-readelf -l mkfs.ext4
Elf file type is EXEC (Executable file)
Entry point 0x2001970
There are 8 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000034 0x02000034 0x02000034 0x00100 0x00100 R E 0x4
INTERP 0x000134 0x02000134 0x02000134 0x00013 0x00013 R 0x1
[Requesting program interpreter: /lib/ld-linux.so.2]
LOAD 0x000000 0x02000000 0x02000000 0x34eb0 0x34eb0 R E 0x8000
LOAD 0x035000 0x0203d000 0x0203d000 0x00fa4 0x015f4 RW 0x8000
DYNAMIC 0x035020 0x0203d020 0x0203d020 0x000d0 0x000d0 RW 0x4
NOTE 0x000148 0x02000148 0x02000148 0x00020 0x00020 R 0x4
TLS 0x035000 0x0203d000 0x0203d000 0x00004 0x00054 R 0x4
GNU_EH_FRAME 0x02f840 0x0202f840 0x0202f840 0x010c4 0x010c4 R 0x4
这儿有一个绝对路径
[Requesting program interpreter: /lib/ld-linux.so.2]
所以建了一个链接过去;
ln -s /mnt/libld-linux.so.2 /lib/ld-linux.so.2
然后运行了一下mkfs.ext4,成功了