Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程
(1) ramdisk.img
发布日期:2021-06-30 21:48:59
浏览次数:4
分类:技术文章
本文共 2778 字,大约阅读时间需要 9 分钟。
首先通過編譯,先將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目錄下的。
转载地址:https://loongembedded.blog.csdn.net/article/details/38871213 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月20日 16时13分50秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【接口自动化】
2019-05-01
SpringBoot搭建一个Web工程
2019-05-01
Spring Boot 安全框架 Shiro 入门
2019-05-01
如何用一句话激怒互联网人?
2019-05-01
用 Python 爬了点你们喜欢的电影
2019-05-01
推荐一位川大零基础转行 Python 的人生勇士
2019-05-01
讲真,做Python一定不要只会一个方向!
2019-05-01
Python 2大限来了!113天后自生自灭,官方不再维护更新
2019-05-01
GitHub 热榜第一的 Python 抢票神器!节假日能用上
2019-05-01
1.6w 星开源项目,但作者月薪却不到 5K
2019-05-01
Python解惑之:整数比较
2019-05-01
Python解惑之:True与False
2019-05-01
你要的微信小程序终于来了
2019-05-01
我的2016书单
2019-05-01
冷眼看小程序
2019-05-01
为什么执行 x in range(y) 如此快?
2019-05-01
看完这篇文章你还不理解 Python 装饰器,只有一种可能...
2019-05-01
Python干货:表达式 i += x 与 i = i + x 等价吗?
2019-05-01
有了这些 Chrome 插件,效率提升10倍(建议收藏)
2019-05-01
Python 编码错误的本质原因
2019-05-01