android的各种*.img 文件
關(guān)于android的各種disk images
對(duì)android的各種disk images很好奇,一直想知道怎么去know和hack這些images,所以就有了這篇paper。
- chenjian@ubuntu8:/tmp/images$ file *
kernel-qemu:????????? data
local.img:?????????????? data
ramdisk.img:?????????? gzip compressed data, from Unix, last modified: Thu Oct 22 16:30:38 2009
system.img:?????????? VMS Alpha executable
userdata.img:???????? VMS Alpha executable
opl.img:???????????????? VMS Alpha executable - 可見(jiàn)有三種,data, gzip和VMS Alpha executable;
- 再看從avd目錄取得的image文件
- chenjian@ubuntu8:/tmp/images/HVGA.avd$ file *
cache.img:?????????????? VMS Alpha executable
userdata.img:?????????? VMS Alpha executable
userdata-qemu.img:?? data - 仍然沒(méi)有逃脫以上三種image類(lèi)型。
- 用表格表示如下
文件類(lèi)型 文件 data kernel-qemu
local.img
userdata-qemu.imggzip ramdisk.img VMS Alpha executable system.img
userdata.img(images目錄)
opl.img
userdata.img(avd目錄)
cache.img
- 可以使用這個(gè)命令來(lái)查看ramdisk.img
- root@ubuntu8:/tmp/images# gzip -d -S .img ramdisk.img
root@ubuntu8:/tmp/images# ls -lrt ramdisk
-rw-r--r-- 1 root root 260608 Oct 22 01:34 ramdisk - 可見(jiàn)ramdisk.img被解壓成ramdisk,
- root@ubuntu8:/tmp/images# file ramdisk
ramdisk: ASCII cpio archive (SVR4 with no CRC) - 可見(jiàn)ramdisk是個(gè)cpio文件,需要用cpio來(lái)extract
- root@ubuntu8:/tmp/images# mkdir ramdiskdir??????????????????????????????????????? 創(chuàng)建ramdiskdir來(lái)裝ramdisk的內(nèi)容
root@ubuntu8:/tmp/images# cd ramdiskdir/????????????????????????????????????????? cd到該目錄中
root@ubuntu8:/tmp/images/ramdiskdir# cpio -idmv <../ramdisk???????????????? 使用cpio來(lái)extractramdisk文件
data
default.prop
dev
init
init.goldfish.rc
init.rc
proc
sbin
sbin/adbd
sys
system
509 blocks
root@ubuntu8:/tmp/images/ramdiskdir# ls??????????????????????????????????????????? 這就是被打包在ramdisk中的文件
data? default.prop? dev? init? init.goldfish.rc? init.rc? proc? sbin? sys? system - 使用find和file來(lái)看這些文件,發(fā)現(xiàn)init其實(shí)是個(gè)ARM arch的可執(zhí)行文件,這也和emulator中所說(shuō)的linux是ARM arch相吻合
root@ubuntu8:/tmp/images/ramdiskdir# find . -type f|file -f -
./default.prop:????????????? ASCII text
./init.rc:???????? ASCII English text
./init.goldfish.rc:????????????????? ASCII English text
./init:????? ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
./sbin/adbd:?????????? ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped - 查看某些文件的md5
root@ubuntu8:/tmp/images/ramdir# find . -name "init*"|xargs md5sum
c3cff931e494bb4872f0ebefe1dad548? ./init.rc
90dd60a3458cce84901d12b362880339? ./init.goldfish.rc
7a950533c62fe91300a5b31b12a38084? ./init - ls –lrt 這些文件
root@ubuntu8:/tmp/images/ramdir# find . |grep init|xargs ls -lrt
-rwxr-x--- 1 root root? 11875 Jan? 1? 1970 ./init.rc
-rwxr-x--- 1 root root?? 2138 Jan? 1? 1970 ./init.goldfish.rc
-rwxr-x--- 1 root root 127548 Jan? 1? 1970 ./init
data文件共有這么幾個(gè),kernel-qemu,local.img和userdata-qemu.img。
什么是data文件?如何使用這些文件?我們面臨著么兩個(gè)問(wèn)題
VMS Alpah executable共有這么幾個(gè)system.img,userdata.img,opl.img,userdata.img和cache.img。
什么是VMS Alpha executable?如何使用這些文件?我們面臨這么兩個(gè)問(wèn)題。。。
使用這個(gè)命令據(jù)說(shuō)可以在emulator起來(lái)以后進(jìn)入到android os的shell中,我們來(lái)看看、
- D:\Program Files\OPhoneSDK_1.5.beta\tools>adb shell
# pwd
pwd
/ - # ls -l
ls -l
lrwxrwxrwx root???? root????????????? 2010-01-31 15:03 preload -> /system/preload
drwxr-xr-x root???? root????????????? 2010-01-31 15:03 Linux
lrwxrwxrwx root???? root????????????? 2010-01-31 15:03 bin -> /opl/telephony/bin
lrwxrwxrwx root???? root????????????? 2010-01-31 15:03 usr -> /opl/telephony/usr
lrwxrwxrwx root???? root????????????? 2010-01-31 15:03 lib -> /opl/telephony/lib
drwxrwxrwt root???? root????????????? 2010-01-31 15:05 tmp
drwxrwxrwt root???? root????????????? 2010-01-31 15:05 sqlite_stmt_journals
drwxrwx--- system?? cache???????????? 2009-12-20 10:11 cache
drwxr-xr-x system?? system??????????? 2009-10-10 13:11 opl
drwxrwxrwx system?? system??????????? 2009-10-24 01:48 local
d--------- system?? system??????????? 2010-01-31 15:03 sdcard
drwxr-xr-x root???? root????????????? 2010-01-31 15:03 d
lrwxrwxrwx root???? root????????????? 2010-01-31 15:03 etc -> /system/etc
drwxr-xr-x root???? root????????????? 2009-10-22 16:20 system
drwxr-xr-x root???? root????????????? 1970-01-01 08:00 sys
drwxr-x--- root???? root????????????? 1970-01-01 08:00 sbin
dr-xr-xr-x root???? root????????????? 1970-01-01 08:00 proc
-rwxr-x--- root???? root??????? 11875 1970-01-01 08:00 init.rc
-rwxr-x--- root???? root???????? 2138 1970-01-01 08:00 init.goldfish.rc
-rwxr-x--- root???? root?????? 127548 1970-01-01 08:00 init
-rw-r--r-- root???? root????????? 118 1970-01-01 08:00 default.prop
drwxrwx--x system?? system??????????? 2009-12-20 10:11 data
drwx------ root???? root????????????? 1970-01-01 08:00 root
drwxr-xr-x root???? root????????????? 2010-01-31 15:04 dev - 果然,可以run一些linux下的基本命令,如ls,pwd等,證明了我們確實(shí)是獲得了一個(gè)linux shell
- 另外黃顏色顯示的文件和我們?cè)趓amdisk中看到的文件似乎大小一致,暗示它們是同一。
- run mount to see有那些文件系統(tǒng)被mount了
# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
tmpfs /tmp tmpfs rw 0 0
/dev/block/mtdblock0 /system yaffs2 rw 0 0????????????????????????????????????
/dev/block/mtdblock4 /opl yaffs2 rw 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock3 /local yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0 - 我們看見(jiàn)了system,opl,data,local和cache;恩,這些名字和那個(gè)表格里的data/VMS Alpha Executable似乎有些重合
/system,/opl和/cache是VMS Alpha Executable的system.img,opl.img和cache.img轉(zhuǎn)換而來(lái)
/local是data的local.img轉(zhuǎn)換而來(lái)
/data嘛,就不太好判斷,不知道和userdata.img和userdata-qemu.img有什么關(guān)系沒(méi)?
但至少我們知道可以查看/system來(lái)明白system image包含哪些東西了吧。。。,比如/system/framework就是android的framework啦
也可以知道可以查看/cache來(lái)明白什么是cache image的內(nèi)涵了吧。。。
對(duì)于local image同理可得。。。 - 另外,adb shell提供的command有限,比如沒(méi)有zcat,cp,uname和busybox等,有沒(méi)有辦法能將這些命令加入進(jìn)去呢?
到這里下載busybox,http://benno.id.au/blog/2007/11/14/android-busybox,然后按照提示將busybox push至/data/busybox目錄,install后即可運(yùn)行所有的busybox applet。比如:# /data/busybox/zcat /proc/config.gz|/data/busybox/more
/data/busybox/zcat /proc/config.gz|/data/busybox/more
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.25
# Mon Nov 10 05:02:15 2008
所以我們就能知道1.5的Android用的linux kernel是2.6.25版本的。。。
ok,這又是一種新的文件系統(tǒng),designed specially for NANDchips;YAFFS2是YAFFS的第二版,為了適應(yīng)新的NAND chips,這些新chip的pagesize有2048bytes,plus 64bytes的spare areas;老版本的NANDchips的page是512bytes,plus 16bytes spare area。
從這篇文章編譯Android1.5里能否得到一些啟示?
在編譯android1.5后,其實(shí)我們能得到3個(gè)img文件,似乎可以下斷言,這三個(gè)image是在編譯android的過(guò)程中得到的。有關(guān)生成他們的過(guò)程又是另外一個(gè)話題,估計(jì)得去讀makefile了。
root@ubuntu8:/ophone/android-1.5# find . -name *.img
./out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
./out/target/product/generic/userdata.img
./out/target/product/generic/system.img
./out/target/product/generic/ramdisk.img
BTW, out目錄是在編譯過(guò)程中產(chǎn)生的目錄,其余目錄則是source目錄
總結(jié)
以上是生活随笔為你收集整理的android的各种*.img 文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android 重新编译资源文件
- 下一篇: Android ramdisk.img