2010年7月17日 星期六

Android img檔的解壓與打包

編完Android之後,會出現三個img檔:ramdisk.img、system.img和userdata.img。ramdisk即Android的根目錄,init.rc等開機時所需的檔案在這裡。system則含系統的執行檔,data就是使用者自己的空間,是可寫入的(前兩者都預設是read-only filesystem)。
因為是read-only的關係,因此我們如果要改ramdisk或system裡的東西,就要先解壓,改完後打包,最後再燒進去就好了,不必重編。

1. ramdisk.img的解壓 (unpack_ramdisk.sh)



#!/bin/bash
mv ramdisk.img ramdisk.img.gz
gzip -d ramdisk.img.gz

mkdir -p ramdisk
cd ramdisk

cpio -i -F ../ramdisk.img



2. ramdisk.img的打包(pack_ramdisk.sh)



#/bin/bash
cd ramdisk
cpio -i -t -F ../ramdisk.img > list          #查看ramdisk.img的內容並存成文字檔 可以用ls > list 取代
cpio -o -H newc -O new.img < list     #根據list把檔案打包 不在list中的就不會被打包了

gzip new.img

mv new.img.gz new.img
mv new.img ..
cd ..



3. system.img的解壓

因為system.img是yaffs2的格式,而非ramdisk的gzip壓縮格式,所以先去下載unyaffs原始碼

gcc -o unyaffs unyaffs.c  得到執行檔後,就可以直接把system.img解壓了

./unyaffs system.img  (會解壓在當前資料夾)


4. system.img的打包
要使用mkyaffs2image,這個程式已經附在Android原始碼,在:out/host/linux-x86/bin/ 之內

./mkyaffs2image system/(要打包的資料夾) system.img (output name)

這樣就可以了

沒有留言:

張貼留言