android的文件系统结构及其引导过程的初步理解

 

转自网络自己学习用

 

1、android文件系统的结构
android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img 是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。

2、分离android文件系统出来
system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:
file ramdisk.img,输出:
ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009
Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 ramdisk.img解压出来:
将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
gunzip ramdisk.img.gz
然后新建一个文件夹,叫ramdisk吧,进入,输入命令
cpio -i -F ../ramdisk.img
这下,你就能看见并操作ramdisk里面的内容了。
然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了。

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

4、android内核引导文件系统
android内核挂载/nfsroot/androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是:
1)设置一些环境变量
2)创建system、sdcard、data、cache等目录
3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
4)设置一些文件的用户群组、权限
5)设置一些线程参数
6)设置TCP缓存大小

 

增加:

ramdisk.img 是根文件系统.android是把root目录打包弄成这个东西的.所以可以把它解包,修改配置信息等.然后再重新打包好.

思路有了,开始干活.解包过程:
1  创建tmp 目录.
2  用mv命令改ramdisk.img 为ramdisk.cpio.gz
3  gzip -d ramdisk.cpio.gz  此时你会在当前目录看见ramdisk.cpio
4  把ramdisk.cpio 放到tmp目录下. 
5  cpio -i -F ramdisk.cpio
如果幸运.你会看到一些文件和目录.

打包过程:
1  进入tmp目录
2  cpio -i -t -F  ../ramdisk.cpio   此时在tmp 目录上一及目录出现了文件ramdisk.cpio
3  cpio -o -H newc -O  ../ramdisk_new.cpio
此时在tmp目录上一及目录出现了ramdisk_new.cpio,把该文件改名字 ramdisk.img放大SDK中测试,居然好了,

 

 

三:

浅析如何在android上生成我们自己的ramdisk.img启动系统文件

一.如何取出ramdisk.img中的包含的所有内容
1.下载我们生成的ramdisk.img
2.查看ramdisk.img文件类型
luther@gliethttp:/vobs/tmp$ luther@gliethttp:/vobs/tmp$ file ramdisk.img
ramdisk.img: gzip compressed data, from Unix, last modified: Fri Jan 16 02:19:47 2009
3.解压经过gz的ramdisk.img
luther@gliethttp:/vobs/tmp$ gunzip -S .img ramdisk.img
该操作完成之后,ramdisk.img将被转换为ramdisk
或者
luther@gliethttp:/vobs/tmp$ gunzip -c -S .img ramdisk.img >luther_ramdisk.img
这样将生成指定的luther_ramdisk.img文件,同时ramdisk.img文件保持不变.
4.解压ramdisk所有内容到当前目录
luther@gliethttp:/vobs/tmp$ mkdir luther_ramdisk
luther@gliethttp:/vobs/tmp$ cd luther_ramdisk/
luther@gliethttp:/vobs/tmp/luther_ramdisk$ cpio -i -F ../luther_ramdisk.img
450 blocks
luther@gliethttp:/vobs/tmp/luther_ramdisk$ ll
total 152K
drwxr-xr-x 2 luther luther 4.0K 2009-01-16 14:50 system
drwxr-xr-x 2 luther luther 4.0K 2009-01-16 14:50 sys
drwxr-x--- 2 luther luther 4.0K 2009-01-16 14:50 sbin
drwxr-xr-x 2 luther luther 4.0K 2009-01-16 14:50 proc
-rwxr-x--- 1 luther luther  11K 2009-01-16 14:50 init.rc
-rwxr-x--- 1 luther luther 1.8K 2009-01-16 14:50 init.goldfish.rc
-rwxr-x--- 1 luther luther 101K 2009-01-16 14:50 init
drwxr-xr-x 2 luther luther 4.0K 2009-01-16 14:50 dev
-rw-r--r-- 1 luther luther   93 2009-01-16 14:50 default.prop
drwxrwx--x 2 luther luther 4.0K 2009-01-16 14:50 data
5.然后将希望添加到ramdisk中的文件添加进来.
二.如何将目录打包成ramdisk.img
1.对ramdisk目录进行cpio生成
luther@gliethttp:/vobs/tmp/ramdisk$ find . | cpio -o -H newc > ../tmp_ramdisk.img
450 blocks
2.压缩成gz文件,生成我们需要的ramdisk.img
仅仅对生成的tmp_ramdisk.img进行gzip压缩就行了.
luther@gliethttp:/vobs/tmp$ gzip -c tmp_ramdisk.img > luther_ramdisk.img
这样我们新的ramdisk.img就成功生成了,把luther_ramdisk.img烧写到手机上即可[luther.gliethttp]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值