首先通過編譯,先將android內核編譯成功。正常情況下,在目錄out/target.product/generic/(但是有的就沒有generic文件,如freescale和iriver;但是lonshinetech下面就有這個文件,依據情況而定,只要能找到生成的三個文件就可以。例如:~/freescale/R9.2/out/target/product/imx51_bbg$
)下會生成三個文件:ramdisk.img,system.img,userdata.img。這三個文件的作用如下:



(1) ramdisk.img

一個分區影像文件,它會在kernel 啟動的時候,以只讀的方式被 mount , 這個文件中只是包含了 /init 以及一些配置文件,這個ramdisk 被用來調用init,以及把真正的root file system mount 起來。

#其實ramdisk.img的內容就是/out/target/product/generic/root目錄的壓縮而已。



方法1: android編譯生成後的ramdisk.img是一個gzip格式的文件,輸入命令 # file ramdisk.img, 會得到 =>ramdisk.img: gzip compressed data, from Unix



那麼先解壓ramdisk.img,因為後綴不是.gz,所以用—S選項, # gunzip -S .img ramdisk.img

這樣就得到一個新文件ramdisk.img,用 # file ramdisk 查看格式 , 得到 => ramdisk: ASCII cpio archive (SVR4 with no CRC)



可以看出解壓生成的ramdisk是cpio格式的文件,再次解壓,為了防止解壓後文件混亂,

首次建立一個目錄如: # mkdir rfs //rfs可以用來放ramdisk解壓後的文件, 進入 # cd rfs

解壓 # cpio -i -F ../ramdisk



方法2: 將ramdisk.img復制一份到任何其他目錄下,將其改名為ramdisk.img.gz,然後使用命令 # gunzip ramdisk.img.gz,

然後新建一個文件夾ramdisk,進入,輸入命令 # cpio -i -F ../ramdisk.img





得到結果如下:

drwxr-xr-x 8 root root 4096 2011-01-12 11:36 ./

drwxr-xr-x 13 root root 4096 2011-01-12 11:35 ../

drwxrwx--x 2 root root 4096 2011-01-12 11:36 data/

-rw-r--r-- 1 root root 118 2011-01-12 11:36 default.prop

drwxr-xr-x 2 root root 4096 2011-01-12 11:36 dev/

-rwxr-x--- 1 root root 107784 2011-01-12 11:36 init*

-rwxr-x--- 1 root root 492 2011-01-12 11:36 init.freescale.rc*

-rwxr-x--- 1 root root 1677 2011-01-12 11:36 init.goldfish.rc*

-rwxr-x--- 1 root root 18263 2011-01-12 11:36 init.rc*

drwxr-xr-x 2 root root 4096 2011-01-12 11:36 proc/

drwxr-x--- 2 root root 4096 2011-01-12 11:36 sbin/

drwxr-xr-x 2 root root 4096 2011-01-12 11:36 sys/

drwxr-xr-x 2 root root 4096 2011-01-12 11:36 system/



#可以看出這寫文件是和root目錄下的內容完全一樣,其實就是對root目錄的打包和壓縮。可以是用tree -L 1來查看root的目錄



(2) system.img

它包含了整個系統,android 的framework,application 等等,會被掛接到 "/" 上,包含了系統中所有的二進制文件

# system.img是out/target.product/generic/目錄下system目錄的一個映射,類似與根文件系統的映像,放著android 的應用程序、配置文件和字體等。



root@root-OptiPlex-380:~/lonshinetech/src/SPU_B0_R0_0/out/target/product/generic/system$ tree -L 1

.

|-- bin

|-- build.prop

|-- etc

|-- fonts

|-- framework

|-- lib

|-- usr

-- xbin



重新打包system.img 具體辦法

a) 在android編譯後生成的out目錄中查找這個工具 mkyaffs2image

# find out/ -name mkyaffs2image

得到=>out/host/linux-x86/bin/mkyaffs2image

b) android編譯後會生成system/ 這個目錄,而這個目錄就是用來生成system.img的

# mkyaffs2image system/ system.img



(3) userdata.img



將會被掛接到 /data 下,包含了所有應用相關的配置文件,以及用戶相關的數據 。







(4) Android啟動過程

Android啟動過程使,會由UBOOT傳入一個init參數,這個init參數制定了開機的時候運行的第一個運行的程序,默認就是init程序,這個程序就在ramdisk.img中,可以分析一下它的代碼,看看在其中到底做了一些什麼樣的初始化任務,它的源文件在system/core/init/init.c中。



它會調用init.rc初始化這個文件,這個文件在out/target/product/generic/root下。

android啟動時首先加載的是ramdisk.img鏡像,並掛載到/目錄下,並進行一系列的初始化動作,包括創建各種需要的目錄,初始化console,開啟服務等。system.img是在init.rc中指定一些腳本命令,通過init.c進行解析並掛載到根目錄下的/system目錄下的。

Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程的更多相关文章

  1. Android 系统镜像: boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img

    boot.img(kernel.img+ramdisk.img) ramdisk.img(/) system.img(/system) userdata.img(/data) cache.img(/c ...

  2. Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.

    Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img. 2014年10月20日 ⁄ 计算机视觉 ⁄ 共 1 ...

  3. 解压 Android 系统中的 system.img

    本篇文章讲解 system.img 是什么东西,以及它的打包和解包方式 system.img 是什么 system.img 是 Android 系统中用来存放系统文件的镜像 (image) ,文件格式 ...

  4. 【转】Android出现“Read-only file system”解决办法

    原文网址:http://www.111cn.net/sj/android/44496.htm 下面介绍一篇Android出现“Read-only file system”解决办法 有碰到这类问题的朋友 ...

  5. (转载)Android出现“Read-only file system”解决办法

    下面介绍一篇Android出现“Read-only file system”解决办法 有碰到这类问题的朋友可参考参考.   Android-出现Read-only file system的解决方法 输 ...

  6. Android系统启动过程-uBoot+Kernel+Android

    摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...

  7. Android -- Layout布局文件里的android:layout_height等属性为什么会不起作用?

    有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性来布局,比如我们设置了android:layout_marginTop="100dip ...

  8. Android系统启动过程[典☆☆☆]

    Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动 ...

  9. Android系统启动过程【转】

    转自:http://www.cnblogs.com/bastard/archive/2012/08/28/2660389.html Android系统启动过程 首先Android框架架构图:(来自网上 ...

随机推荐

  1. 求字符串的最长回文字串 O(n)

    昨天参加了某公司的校园招聘的笔试题,做得惨不忍睹,其中就有这么一道算法设计题:求一个字符串的最长回文字串.我在ACM校队选拔赛上遇到过这道题,当时用的后缀数组AC的,但是模板忘了没写出代码来. 回头我 ...

  2. ACM--South Pacific 2012

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=5 ...

  3. linux系统非ROOT用户80端口不能启动tomcat问题的变通办法——通过Iptables端口转发

    2010-07-17 13:21:42 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{ ...

  4. Leetcode#73 Set Matrix Zeroes

    原题地址 用矩形的第一行和第一列充当mask 代码: void setZeroes(vector<vector<int> > &matrix) { ].empty()) ...

  5. Kerberos的组件和术语(翻译和注解)

    之所以要翻译这篇文章,是因为提到了一些通常于对Kerberos协议简介性质的文章所没有提到的细节,而这些细节对于理解Kerberos的工作原理,以及Kerberos协议实现的使用都是很有必要的. 1. ...

  6. 解决JS文件页面加载时的阻塞

    关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法.本文章就详细介绍XHR注入. 概述:JS分拆的方法 1.XHR注入:就是用ajax异步请求同域包含脚本的文件,然后将返回的字符串转化 ...

  7. HDU 3833 YY's new problem(换种思路的模拟,防超时)

    题目链接 用p[a]保存的是输入的a在第p[a]个,  然后根据差值查找. #include<stdio.h> #include<string.h> int main() { ...

  8. uva 10817

    Problem D: Headmaster's Headache Time limit: 2 seconds The headmaster of Spring Field School is cons ...

  9. 使用git了解代码编写过程

    在看教程时,有的老师会将代码放到github,如果不想跟着视频一步一步来,那就直接clone整个代码,但整个看着又有点蒙,那就使用版本切换的功能了. 首先 git clone 下载下来 git log ...

  10. 传说中的WCF(4):发送和接收SOAP头

    如果你实在不明白Header是个啥玩意儿,你就想一想你发送电子邮件时,是不是有个叫“附件”的东东?对啊,那么SOAP头是不是可以理解为一种附加信息?就是附加到消息正文的内容. 消息正文又是啥?WCF除 ...