2013年3月30日 星期六

Android的解壓system.img方法


第一使解壓工具
下載:ext4_utils源碼包編譯
下載地址:
解壓:ext4_utils

  • ~/work$ cd ext4_utils
  • ~/work/ext4_utils$ make clean
  • rm -rf *.o make_ext4fs simg2img
  • ~/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
  • ~/work/ext4_utils$


如果有錯誤不能output_file.c就需要安裝的zlib庫,運行:


sudo apt-get install zlib1g-dev


第二解壓system.img
把得到的make_ext4fs simg2img
[生成的ext4格式的文件]
../simg2img system.img system.img.ext4 (輸入./simg2img的意思是,執行當前目錄下的這個文件)
mkdir tmp   (建立 tmp 資料夾方便我們修改)

[掛載tmp對應系統鏡像做修改]


mount -t ext4 -o loop system.img.ext4 tmp/ 


查看TMP目錄可以看見如下:



這時候可以進入掛載的目錄mysys裡面查看各個文件,甚至是修改了。不過這時候要注意一點,就是保持文件的原始權限,如果一不小心修改錯了,那麼你可以將文件權限設置最大的777,然後再修改用戶為root既可

小提示:app目錄內的文件權限都是644,framework目錄也是644,其他目錄一般也都是644的,文件夾權限一般都是755



舉個例子,我準備把su這個文件加到固件的bin目錄下,並且修改權限

cp ~/work/su ./
ls -l su -rwxr-xr-x 1 root root 26264 2011-07-17 21:16 su
sudo chown root.2000 su
ls -l su -rwxr-xr-x 1 root 2000 26264 2011-07-17 21:16 su
sudo chmod 06755 su
ls -l su -rwsr-sr-x 1 root 2000 26264 2011-07-17 21:16 su




(如果你不知道權限該如何設置,可以使用命令 ls -l sysmain/app 查看文件具體權限,根據其他文件的權限來修改你的文件權限即可)
(當你替換已經存在的文件,無需修改權限,如果放入一個沒有存在過的文件,切記修改相應的用戶組,使用命令chown root.root 來修改它的用戶和用戶組)
如果執行命令權限不足,可以在每個命令前加上sudo命令,這樣可以以最高權限執行每個命令了
這個就是將app目錄設置為權限高,然後你將文件放入。放入後記得一定要再將你放入的文件權限改好。同時恢復app原始權限
一般建議大家使用命令來移動、複製文件,這樣不存在權限問題



第三打包

./mkuserimg.sh -s sysmain systest.img.ext4 ext4 tmp 512M



注意:tmp是我在當前目錄新建立的一個目錄,後面的512M是這個鏡像打包後佔用空間大小。如果你不知道你的鏡像包應該多大,你查看你鏡像掛載到目錄後,這個鏡像分區的大小
當你完成以上步驟,新的systest.img.ext4成功生成了,好了,你可以在fastboot模式下刷入了






  • sudo ./make_ext4fs -l 512M -s -a system system-new.img ./tmp
  • 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



  • 沒有留言:

    張貼留言