Android 文件系统分析

来源:互联网 发布:centos nginx yum 安装 编辑:程序博客网 时间:2024/04/29 00:49

文章出处http://code.google.com/p/androidteam/wiki/AndroidFileSystemAnalysis1


Android 文件系统分析

  • 系统环境: ubuntu9.10
  • Date: 03/09/2010
将Android源码编译后会在/home/zhaoruijia/zhaoAndroid/out/target/product/generic目录下发现编译后生成的3个镜像文件:system.img,ramdisk.img,userdata.img,其中system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,模拟器加载这3个映像文件后,会把 system和data分别加载到ramdisk文件系统中的system和data目录下ramdisk.img是模拟器的文件系统,我们可以通过输入:
zhaoruijia@zhaoruijia-ubunut:~$ androidemu zhaoruijia@zhaoruijia-ubunut:~$ adb shell
# lssqlite_stmt_journalsconfigcachesdcarddetcsystemsyssbinprocinit.rcinit.goldfish.rcinitdefault.propdatarootdev
观察到在模拟器的shell里根文件系统结构,如果要进行内核移植,根文件系统是必不可少的,目前有两种方法获得一个根文件系统,一种方法是将模拟器中的文件系统通过打包的方式拖出来,然后以此为基础通过busybox重新定制一个根文件系统,还有一种方法就是我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到ramdisk文件系统中的system和data目录下,这里由于Android源码编译后除了生成system.img,userdata.img之外还生成system和 data文件夹,因此不需要解压它们。只需将他们拷贝出来即可,然后使用网络文件系统方式挂载Android文件系统,具体步骤如下:

1、将ramdisk.img复制到/home/zhaoruijia/workspace1目录下并将其名称改为ramdisk.img.gz

 zhaoruijia@zhaoruijia-ubunut:~/workspace1$ mv ramdisk.img ramdisk.img.gz

并使用命令

zhaoruijia@zhaoruijia-ubunut:~/workspace1$ gunzip ramdisk.img.gz zhaoruijia@zhaoruijia-ubunut:~/workspace1$ lsramdisk  ramdisk.img

2、新建一个ramdisk文件夹然后输入如下:

zhaoruijia@zhaoruijia-ubunut:~/workspace1$ mkdir ramdiskzhaoruijia@zhaoruijia-ubunut:~/workspace1$ cd ramdiskzhaoruijia@zhaoruijia-ubunut:~/workspace1/ramdisk$ cpio -i -F /home/zhaoruijia/workspace1/ramdisk.img494 

3、然后把Android源码编译后生成的system和data里的文件复制到 ramdisk/system和 ramdisk/data下。这样就得到一个文件系统了。

zhaoruijia@zhaoruijia-ubunut:~/workspace1/ramdisk$ ls -l总用量 152drwxrwx--x  2 zhaoruijia zhaoruijia   4096 2010-03-10 17:42 data-rw-r--r--  1 zhaoruijia zhaoruijia    118 2010-03-10 17:42 default.propdrwxr-xr-x  2 zhaoruijia zhaoruijia   4096 2010-03-10 17:42 dev-rwxr-x---  1 zhaoruijia zhaoruijia 103184 2010-03-10 17:42 init-rwxr-x---  1 zhaoruijia zhaoruijia   1677 2010-03-10 17:42 init.goldfish.rc-rwxr-x---  1 zhaoruijia zhaoruijia  12215 2010-03-10 17:42 init.rcdrwxr-xr-x  2 zhaoruijia zhaoruijia   4096 2010-03-10 17:42 procdrwxr-x---  2 zhaoruijia zhaoruijia   4096 2010-03-10 17:42 sbindrwxr-xr-x  2 zhaoruijia zhaoruijia   4096 2010-03-10 17:42 sysdrwxr-xr-x 10 zhaoruijia zhaoruijia   4096 2010-03-10 17:52 system

4、我们要使用网络文件系统方式挂载Android文件系统因此,我们需要建立/nfsroot目录,再建立/nfsroot/Androidfs目录,把刚才的Android文件系统改名为Androidfs,并链接到/nfsroot/Androidfs

5、Android内核挂载/nfsroot/Androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。至于具体启动过程我会在下一篇文章中结合init.c源码来分析。

遗留问题:由于内核移植没有成功能否通过网络文件系统方式挂载还是未知数,本文只是一个参考,个人更看好从模拟器中获得根文件系统后通过busybox定制,做到后面再看了

http://home.eeworld.com.cn/my/space.php?uid=181697&do=blog&id=42953
原创粉丝点击