制作 ramdisk.img,使用cpio 和 gzip
linux2.6 內核支持兩種格式的 initrd(虛擬文件系統),一種是 linux2.4 內核那種傳統格式的文件系統鏡像?image-initrd,其核心文件就是 /linuxrc.
另外一種格式的 initrd 是 cpio 格式的,這種格式的 initrd 使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init,本文將這種 initrd 稱為 cpio-initrd。盡管 linux2.6 內核對 cpio-initrd和 image-initrd 這兩種格式的 initrd 均支持,但對其處理流程有著顯著的區別。
cpio命令有三種操作模式:copy-out、copy-in、copy-pass,生成 ramdisk.img 用的是它的copy-out模式,即把文件打包的操作模式。cpio的copy-out操作模式使用 -o?命令行選項指定。
把~/root目錄下的文件打包成image.cpio.gz,執行下面的命令:
??????? cd ~/root
find . | cpio -o -Hnewc |gzip?-9 > ../image.cpio.gz
命令執行完畢后,在~/root 目錄下就會生成文件名為imgae.cpio.gz的init ramfs。
解釋 上邊的 命令:
??????? 上邊的 find . 就是 把 ~/root/ 下的 所有 文件 列一個表,
上面?cpio命令的 -H?選項指定打包文件的具體格式,要生成init ramfs,只能用newc?格式?,
?????????
-----------------------------
ramdisk.img(虛擬文件系統)在android中的使用
?ramdisk的使用有兩種方法:1,編譯進內核; 2,將ramdisk單獨燒寫
將 ramdisk解壓,可以看到它里面有很多文件和目錄, 如:data,dev,proc, sbin ,sys,system,default.prop,init,init.rc等,有點像板子跑起來的根目錄. 將解壓出來的文件夾重命名為root,放到linux內核代碼的根目錄下,并用make menuconfig配置啟動這個root文件夾,配置保存后會生成如下項:
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="root"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
這些也可以直接在xxxx_defconfig改,然后make xxxx_defconfig使其生效.
這樣做了以后,root將被編譯進zImage,并隨之一起燒進板子.
也 可以將ramdisk作為一個單獨的包燒寫,就燒在zImage的后面.假如zImage燒在0x600000,那么ramdisk就燒在 0x800000就好.值得注意的是,ramdisk在燒寫之前要進行一次轉換.因為bootloader在運行的時候,會將ramdisk從FLASH 加載到RAM中,它會把FLASH上0x800000-0x880000的空間作為ramdisk讀取,并檢查其最后四個字節,這四個字節保存的是 ramdisk.img的實際大小.所以我們要做的轉換工作就是把原來的ramdisk.img(100多字節)轉換成512字節,并在其最后四個字節寫 ramdisk.img的實際長度。
--------------------------
解壓、修改Android的ramdisk.img的手動方法:
??? 將ramdisk.img復制一份到任何其他目錄下,將其名稱改為ramdisk.img.gz,
???? mv ramdisk.img ramdisk.img.gz
??? gunzip ramdisk.img.gz
注意:這里之所以進行改名,是因為ramdisk.img 是經過gzip壓縮過的,所以需要對其解壓,但是gzip對解壓的文件的文件后綴名又有要求,所以就先進行改名。
?? 然后新建一個文件夾,叫ramdisktwo吧,進入,輸入命令
??? cd ramdisktwo
??? cpio -i -F ../ramdisk.img
或者???cpio? -i -d? < ../ramdisk.img
??? 這下,你就能看見并操作ramdisk里面的內容了。
根據自己的需要對里面的內容修改之后,可以使用下列命令重新打包成鏡像
??? cpio -i -t -F ../ramdisk.img > list
???????????從 ../ramdisk.img 文件里 提取 文件名,包含遞歸,然后 重定向 到 list? 文件里。
??? cpio -o -H newc -O lk.img < list
???把 當前目錄下的文件(在list里的文件)打包成一個歸檔文件, 在當前目錄下生成的lk.img就是我們的新鏡像了。
---------------------------------------------------
總結
以上是生活随笔為你收集整理的制作 ramdisk.img,使用cpio 和 gzip的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解压与压缩ramdisk.img文件,生
- 下一篇: Android构建boot.img:ro