首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android的各种*img 资料

2012-08-22 
android的各种*.img 文件关于android的各种disk images对android的各种disk images很好奇,一直想知道怎么

android的各种*.img 文件

关于android的各种disk images

对android的各种disk images很好奇,一直想知道怎么去know和hack这些images,所以就有了这篇paper。

    用file来查看文件类型 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 可见有三种,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 仍然没有逃脱以上三种image类型。 用表格表示如下
    文件类型文件datakernel-qemu
    local.img
    userdata-qemu.imggzipramdisk.imgVMS Alpha executablesystem.img
    userdata.img(images目录)
    opl.img
    userdata.img(avd目录)
    cache.imgramdisk.img 可以使用这个命令来查看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 可见ramdisk.img被解压成ramdisk, root@ubuntu8:/tmp/images# file ramdisk
    ramdisk: ASCII cpio archive (SVR4 with no CRC) 可见ramdisk是个cpio文件,需要用cpio来extract root@ubuntu8:/tmp/images# mkdir ramdiskdir??????????????????????????????????????? 创建ramdiskdir来装ramdisk的内容
    root@ubuntu8:/tmp/images# cd ramdiskdir/????????????????????????????????????????? cd到该目录中
    root@ubuntu8:/tmp/images/ramdiskdir# cpio -idmv <../ramdisk???????????????? 使用cpio来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来看这些文件,发现init其实是个ARM arch的可执行文件,这也和emulator中所说的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
    data文件共有这么几个,kernel-qemu,local.img和userdata-qemu.img。
    什么是data文件?如何使用这些文件?我们面临着么两个问题 VMS Alpha executable
    VMS Alpah executable共有这么几个system.img,userdata.img,opl.img,userdata.img和cache.img。
    什么是VMS Alpha executable?如何使用这些文件?我们面临这么两个问题。。。 adb shell(1.5版本)
    使用这个命令据说可以在emulator起来以后进入到android os的shell中,我们来看看、 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等,证明了我们确实是获得了一个linux shell 另外黄颜色显示的文件和我们在ramdisk中看到的文件似乎大小一致,暗示它们是同一。 run mount to see有那些文件系统被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

    我们看见了system,opl,data,local和cache;恩,这些名字和那个表格里的data/VMS Alpha Executable似乎有些重合
    /system,/opl和/cache是VMS Alpha Executable的system.img,opl.img和cache.img转换而来
    /local是data的local.img转换而来
    /data嘛,就不太好判断,不知道和userdata.img和userdata-qemu.img有什么关系没?
    但至少我们知道可以查看/system来明白system image包含哪些东西了吧。。。,比如/system/framework就是android的framework啦
    也可以知道可以查看/cache来明白什么是cache image的内涵了吧。。。
    对于local image同理可得。。。 另外,adb shell提供的command有限,比如没有zcat,cp,uname和busybox等,有没有办法能将这些命令加入进去呢?
    到这里下载busybox,http://benno.id.au/blog/2007/11/14/android-busybox,然后按照提示将busybox push至/data/busybox目录,install后即可运行所有的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版本的。。。

    kernel在哪里? 什么是yaffs2? http://en.wikipedia.org/wiki/YAFFS2
    ok,这又是一种新的文件系统,designed specially for NANDchips;YAFFS2是YAFFS的第二版,为了适应新的NAND chips,这些新chip的pagesize有2048bytes,plus 64bytes的spare areas;老版本的NANDchips的page是512bytes,plus 16bytes spare area。 这些disk images从何而来?
    从这篇文章编译Android1.5里能否得到一些启示?
    在编译android1.5后,其实我们能得到3个img文件,似乎可以下断言,这三个image是在编译android的过程中得到的。有关生成他们的过程又是另外一个话题,估计得去读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目录是在编译过程中产生的目录,其余目录则是source目录

热点排行