Android各种img文件作用以及系统启动过程
首先通過編譯,先將android內(nèi)核編譯成功。正常情況在目錄out/target.product/generic/(但是有的就沒有g(shù)eneric文件,如freescale和iriver,但是lonshinetech下面就有這個文件,依據(jù)情況而定,只要能找到生成的三個文件就可以。例如:~/freescale/R9.2/out/target/product/imx51_bbg$ )下會生成三個文件:ramdisk.img,system.img,userdata.img。這三個文件的作用如下:
1,ramdisk.img
?一個分區(qū)影像文件,它會在kernel 啟動的時候,以只讀的方式被 mount,這個文件中只是包含了 /init 以及一些配置文件,這個ramdisk被用來調(diào)用init,以及把真正的root file system mount 起來。(其實(shí)ramdisk.img的內(nèi)容就是/out/target/product/generic/root目錄的壓縮而已)
方法1:android編譯生成后的ramdisk.img是一個gzip格式的文件,輸入命令 # file ramdisk.img,會得到 =>ramdisk.img: gzip compressed data,from Unix?
? ? 那么先解壓ramdisk.img,因?yàn)楹缶Y不是.gz,所以用-S選項(xiàng),# gunzip -S .img ramdisk.img,這樣就得到一個新文件ramdisk.img,用 # file ramdisk 查看格式 , 得到 => ramdisk: ASCII cpio archive (SVR4 with no CRC)?
? ? 可以看出解壓生成的ramdisk是cpio格式的文件,再次解壓,為了防止解壓后文件混亂,首次建立一個目錄如: # mkdir rfs??//rfs可以用來放ramdisk解壓后的文件,進(jìn)入 # cd rfs,解壓 # cpio -i -F ../ramdisk?
方法2:將ramdisk.img復(fù)制一份到任何其他目錄下,將其改名為ramdisk.img.gz,然后使用命令 # gunzip ramdisk.img.gz,然后新建一個文件夾ramdisk,進(jìn)入并輸入命令 # cpio -i -F ../ramdisk.img
得到結(jié)果如下
????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目錄下的內(nèi)容完全一樣,其實(shí)就是對root目錄的打包和壓縮。可以是用tree -L 1來查看root的目錄
2,system.img
它包含了整個系統(tǒng),android的framework,application等等,會被掛接到 "/" 上,包含了系統(tǒng)中所有的二進(jìn)制文件。(system.img是out/target.product/generic/目錄下system目錄的一個映射,類似與根文件系統(tǒng)的映像,放著android的應(yīng)用程序、配置文件和字體等)
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 下,包含了所有應(yīng)用相關(guān)的配置文件,以及用戶相關(guān)的數(shù)據(jù) 。?
4,Android啟動過程
Android啟動過程,會由UBOOT傳入一個init參數(shù),這個init參數(shù)制定了開機(jī)的時候運(yùn)行的第一個運(yùn)行的程序,默認(rèn)就是init程序,這個程序就在ramdisk.img中,可以分析一下它的代碼,看看在其中到底做了一些什么樣的初始化任務(wù),它的源文件在system/core/init/init.c中。它會調(diào)用init.rc初始化這個文件,這個文件在out/target/product/generic/root下。Android啟動時首先加載的是ramdisk.img鏡像,并掛載到 / 目錄下,并進(jìn)行一系列的初始化動作,包括創(chuàng)建各種需要的目錄,初始化console,開啟服務(wù)等。system.img是在init.rc中指定一些腳本命令,通過init.c進(jìn)行解析并掛載到根目錄下的/system目錄下的。
總結(jié)
以上是生活随笔為你收集整理的Android各种img文件作用以及系统启动过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NEERC 17 G.The Great
- 下一篇: 无需QQ密保直接修改QQ密码