首先通過編譯,先將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 img 制作工具,Android 镜像文件制作 【ramdisk.img system.img userdata.img】

    Android项目生成的镜像文件包括ramdisk.img, system.img, userdata.img ramdisk.img 是out/target/product/项目名/root 目录经 ...

  2. Android ramdisk.img system.img userdata.img 介绍与使用

    android源码编译后得到system.img,ramdisk.img,userdata.img映像文件.其中, ramdisk.img是emulator的文件系统,system.img包括了主要的 ...

  3. 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 ...

  4. 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 ...

  5. android 修改ramdisk.img和init.rc android启动后设置/data权限为770

    有时候希望在启动后做点事情,比如在sdcard上建立目录,修改/data的访问权限等,这些都可以放在init.rc中去完成,那么如何来完成呢,最近由于工作的需要,在这方面进行了一些研究,特写于此,供大 ...

  6. Android P 如何挂载system镜像到根目录

    Android O/P 版本以来,谷歌加入了A/B system的特性,此时ramdisk和system是一起放在同一个system.img镜像中的.而系统起来之后也就不存在system分区了,而是直 ...

  7. android提权system,Android push app to /system/app/

    背景 个人想要了解一下关于系统权限方面的知识,而我又天真地以为只要把app push到/system/app/目录下,app就有系统签名了,也就能获取到系统权限了.但是其实这样是不行的...算了,学一 ...

  8. Android异常总结---W/System.err(661): java.lang.IllegalStateException: End of document.

    Android异常总结---W/System.err(661): java.lang.IllegalStateException: End of document. 5.03-22 21:42:10. ...

  9. 安卓system镜像分区_如何完全备份android系统上的system分区和data分区

    安卓的系统备份在很多场合下可能会用到,下面这个python的脚本,可以用来备份整个的data分区:将所有data分区的文件和目录打包到data.zip,并生成recovery的专用edify脚本到up ...

最新文章

  1. ruby中取反的问题
  2. 关于程序猿的几个阶段!
  3. Gradle 设置本地maven
  4. EEPROM的操作---SPI接口和I2C接口
  5. Wing IDE 5.0 破解之寻找注册码
  6. 解决硬盘文件目录损坏且无法读取
  7. linux 查看端口战役,漫画 :Apache Nginx80 端口争夺战
  8. Hexo中next主题的个性化配置
  9. C语言记录元音字母的位置,求元音字母
  10. Wpf之元素绑定元素属性
  11. Golang unsafe包使用笔记
  12. c语言判断素数 是返回1,c语言编程:设计一个函数用于判断一个数是否为素数,如果是素数返回1,否则返回0。...
  13. tagul添加中文字体——最简单的方法
  14. python 抽奖库_用 python 写一个年会抽奖小程序
  15. 每月一书(202106):《刻意练习》(一万小时定律正确吗)
  16. 直播课堂系统,打造出超过线下培训场景200%的在线学习课堂
  17. jQuery-简述篇
  18. Android CMWAP和CMNET 切换APN
  19. 用 QGIS 画矢量交通路线图
  20. 泛微-前端JSP文件实现的后台查找

热门文章

  1. 使用 Servlet 读取表单数据
  2. 计算机网络中什么叫总衰耗_1、什么是计算机网络?
  3. Linux服务器tomcat部署war包
  4. excel公式 某一个单元格等于另一个单元格的值_EXCEL函数学习5——COUNTIF函数
  5. vue实现div多选全选功能_怎样为你的 Vue.js 单页应用提速
  6. 后处理安装_你所不了解的国六后处理
  7. firewall添加白名单_firewall的规则设置与命令(白名单设置)
  8. java实现文件名过滤器接口_Java使用文件过滤器FileFilter、FilenameFilter搜索文件
  9. java8 虚拟机调优_Java虚拟机调优(八)-典型配置举例2
  10. 计算机控制系统如何设计,计算机控制系统设计