如何做rom,體驗做rom過程,附圖文教程,感謝各位romer


http://bbs.gfan.com/android-5408130-1-1.html

有人問我,我簡單的寫一下,來源XDA,運行環境ubuntu 10.4。
ubuntu安裝很簡單,在windows下安裝一個虛擬機vmware或者VirtualBox,網上都有下載,建立一個虛擬機載入ubuntu安裝盤鏡像就可以了,全中文無難度。
http://www.ubuntu.com.cn/download/(我下載的32位12.04.1,用的內存卡安裝,使用imgewriter ImageWriter.zip (19.66 KB) (先將ubuntu.iso改為ubuntu.raw,就是改后綴,然后點擊copy)寫入內存卡,安裝的win7+ubuntu雙系統)
下載ext4_utils源碼包編譯。
ext4_utils.tar (200 KB)
這是我編譯好的: make_ext4fs.tar (80 KB)

  • ~/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$

如果有錯誤/usr/bin/ld: cannot find -lz
就需要安裝zlib庫,運行:
sudo apt-get install zlib1g-dev
上面這些指令可以不用做,直接用小路編譯的 ext4_utils就行,在主文件夾下新建文件夾重命名為work(名字隨便,最好英文),將ext4_utils解壓進work文件夾

把得到的make_ext4fs simg2img 和mkuserimg.sh放在你的工作目錄下(就是work/ext4_utils文件夾,不過我是直接將這三個文件及ext4_utils文件夾里的全部內容直接放在了work文件夾根目錄,因為開始所有文件放在work/ext4_utils文件夾時候,執行ls命令的時候什么東西都沒出現),把固件包里解壓出來的factoryfs.img拷貝到工作目錄。

運行 simg2img factoryfs.img ZNKG5.img 得到512m的 ZNKG5.img,然后就可以掛載了(運行之前將simg2img的權限改為讀寫,否則運行不了)。
  • ~/work$ ./simg2img factoryfs.img ZNKG5.img
  • ~/work$ mkdir ZNKG5
  • ~/work$ sudo mount -o loop ZNKG5.img ZNKG5



這樣你就可以對固件做修改了,可以root固件,可以精簡固件,這里主要提一下權限問題,不要輕易修改這個目錄的權限,要保持默認的權限,不然你打包回去會有問題的,這里我舉個例子,我准備把su這個文件加到固件的bin目錄下,並且修改權限。
  • ~/work/ZNKG5/bin$ sudo cp ~/work/su ./
  • ~/work/ZNKG5/bin$ ls -l su
  • -rwxr-xr-x 1 root root 26264 2011-07-17 21:16 su
  • ~/work/ZNKG5/bin$ sudo chown root.2000 su
  • ~/work/ZNKG5/bin$ ls -l su
  • -rwxr-xr-x 1 root 2000 26264 2011-07-17 21:16 su
  • ~/work/ZNKG5/bin$ sudo chmod 06755 su
  • ~/work/ZNKG5/bin$ ls -l su
  • -rwsr-sr-x 1 root 2000 26264 2011-07-17 21:16 su
  • ~/work/ZNKG5/bin$


打包很簡單。
我是這么做的,避免無權限的問題。
  • sudo ./make_ext4fs -l 512M -s -a system ZNKG5-new.img ./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

我來解釋下這個命令的參數:"
-l 512M"是分區大小,i9100的system分區是512M;
-s就是生成ext4的S模式制作;
"-a system",是指這個img用於android系統,掛載點是/system,使用這個參數,make_ext4fs會根據private/android_filesystem_config.h里定義好的權限來給文件夾里的所有文件重新設置權限,如果你刷機以后發現有文件權限不對,可以手工修改android_filesystem_config.h來添加權限,重新編譯make_ext4fs,也可以不使用 “-a system”參數,這樣就會使用文件的默認權限。

得到的ZNKG5-new.img 就可以改名成factoryfs.img打包成tar刷機了。
  • move ZNKG5-new.img factoryfs.img
  • tar -cvf pda.tar factoryfs.img

如有錯漏請指教,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM