有人問我,我簡單的寫一下,來源XDA,運行環境ubuntu 10.4。
ubuntu安裝很簡單,在windows下安裝一個虛擬機vmware或者VirtualBox,網上都有下載,創建一個虛擬機載入ubuntu安裝盤鏡像就能夠了,全中文無難度。php
http://www.ubuntu.com.cn/download/html
下載ext4_utils源碼包編譯。
複製連接到瀏覽器下載:http://www.59a.cn/sfo/ext4_utils.tarnode
這是編譯好的:
複製連接到瀏覽器下載:http://www.59a.cn/sfo/make_ext4fs.tarubuntu
xiaolu@ubuntu-xiaolu:~/work$ cd ext4_utils xiaolu@ubuntu-xiaolu:~/work/ext4_utils$ make clean rm -rf *.o make_ext4fs simg2img xiaolu@ubuntu-xiaolu:~/work/ext4_utils$ make gcc -I. -DANDROID -c make_ext4fs.c gcc -I. -DANDROID -c make_ext4fs_main.c gcc -I. -DANDROID -c ext4_utils.c gcc -I. -DANDROID -c allocate.c gcc -I. -DANDROID -c backed_block.c gcc -I. -DANDROID -c output_file.c gcc -I. -DANDROID -c contents.c contents.c: In function ‘make_directory’: contents.c:118: warning: format ‘%llu’ expects type ‘long long unsigned int’, but argument 4 has type ‘u32’ gcc -I. -DANDROID -c extent.c gcc -I. -DANDROID -c indirect.c gcc -I. -DANDROID -c uuid.c gcc -I. -DANDROID -c sha1.c gcc -I. -DANDROID -c sparse_crc32.c gcc make_ext4fs.o make_ext4fs_main.o ext4_utils.o allocate.o backed_block.o output_file.o contents.o extent.o indirect.o uuid.o sha1.o sparse_crc32.o -o make_ext4fs -lz gcc -I. -DANDROID -c simg2img.c gcc simg2img.o sparse_crc32.o -o simg2img xiaolu@ubuntu-xiaolu:~/work/ext4_utils$
把獲得的make_ext4fs simg2img 和mkuserimg.sh放在你的工做目錄下,把固件包裏解壓出來的factoryfs.img拷貝到工做目錄。
運行 simg2img factoryfs.img ZNKG5.img 獲得512m的 ZNKG5.img,而後就能夠掛載了。windows
xiaolu@ubuntu-xiaolu:~/work$ ./simg2img factoryfs.img ZNKG5.img xiaolu@ubuntu-xiaolu:~/work$ mkdir ZNKG5 xiaolu@ubuntu-xiaolu:~/work$ sudo mount -o loop ZNKG5.img ZNKG5
這樣你就能夠對固件作修改了,能夠root固件,能夠精簡固件,這裏主要提一下權限問題,不要輕易修改這個目錄的權限,要保持默認的權限,否則你打包回去會有問題的,這裏我舉個例子,我準備把su這個文件加到固件的bin目錄下,而且修改權限。瀏覽器
xiaolu@ubuntu-xiaolu:~/work/ZNKG5/bin$ sudo cp ~/work/su ./ xiaolu@ubuntu-xiaolu:~/work/ZNKG5/bin$ ls -l su -rwxr-xr-x 1 root root 26264 2011-07-17 21:16 su xiaolu@ubuntu-xiaolu:~/work/ZNKG5/bin$ sudo chown root.2000 su xiaolu@ubuntu-xiaolu:~/work/ZNKG5/bin$ ls -l su -rwxr-xr-x 1 root 2000 26264 2011-07-17 21:16 su xiaolu@ubuntu-xiaolu:~/work/ZNKG5/bin$ sudo chmod 06755 su xiaolu@ubuntu-xiaolu:~/work/ZNKG5/bin$ ls -l su -rwsr-sr-x 1 root 2000 26264 2011-07-17 21:16 su xiaolu@ubuntu-xiaolu:~/work/ZNKG5/bin$
打包很簡單。
我是這麼作的,避免無權限的問題。temp是個臨時掛載目錄,須要你手工創建。oop
sudo /home/xiaolu/work/mkuserimg.sh -s /home/xiaolu/work/ZNKG5 /home/xiaolu/work/ZNKG5-new.img ext4 /home/xiaolu/work/temp 512Mui
xiaolu@ubuntu-xiaolu:~/work$ sudo /home/xiaolu/work/mkuserimg.sh -s /home/xiaolu/work/ZNKG5 /home/xiaolu/work/ZNKG5-new.img ext4 /home/xiaolu/work/temp 512M in mkuserimg.sh PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin ./make_ext4fs -s -l 512M -a /home/xiaolu/work/temp /home/xiaolu/work/ZNKG5-new.img /home/xiaolu/work/ZNKG5 Creating filesystem with parameters: Size: 536870912 Block size: 4096 Blocks per group: 32768 Inodes per group: 8192 Inode size: 256 Journal blocks: 2048 Label: Blocks: 131072 Block groups: 4 Reserved block group size: 31 Created filesystem with 1224/32768 inodes and 125043/131072 blocks
獲得的ZNKG5-new.img 就能夠更名成factoryfs.img打包成tar刷機了。
若有錯漏請指教,謝謝。spa