編完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)
這樣就可以了
沒有留言:
張貼留言