split_bootimg.pl, unpackbootimg 와 mkbootmig 사용법으로 android boot.img 수정하기
android 의 kernel image 인 boot.img 를 수정해야 할일이 있을 경우 대처할 수 있는 방법은
첫째 kernel 을 다시 build 한다.
이 방법은 kernel 소스가 필요하다는 조건이 있습니다. 일반적으로 안드로이드 폰에서 커널을 수정한다면 소스를 가지고 있는 경우가 드물겠죠.
각 제조사의 open source site에서 다운로드 받을 수 있겠지만 ubuntu OS에서 빌드환경을 갖추고 빌드하는것이 쉬운일은 아닙니다.
모든 환경이 갖춰져 있다면 아래 명령으로 다시 빌드할 수는 있습니다.
$ make bootimage -j8
-j8은 빌드 서버의 성능에 따라 달라지겠죠?
둘째 boot.img 를 분해하여 다시 조립한다.
boot.img 라는 파일은 build 된 kernel 의 내용을 압축해 놓은 파일이라는 것을 안다면 충분히 가능한 일이라는 것을 알수 있겠죠?
우선 필요한 도구로 unpackbootimg 와 split_bootimg.pl 그리고 mkbootimg 가 필요합니다.
unpackbootimg 와 mkbootimg 는
https://code.google.com/p/android-serialport-api/downloads/detail?name=android_bootimg_tools.tar.gz&can=2&q= 에서 다운로드 가능합니다.
바로 받으려면 이곳에서...
https://android-serialport-api.googlecode.com/files/android_bootimg_tools.tar.gz
split_bootimg 는 https://code.google.com/p/zen-droid/downloads/detail?name=split_bootimg.pl 에서 다운로드 가능합니다.
바로 받으려면 이곳에서...
https://zen-droid.googlecode.com/files/split_bootimg.pl
그리고 boot.img 와 위의 세개 파일을 같은 폴더에 복사해 놓습니다.
그럼 이제 압축을 해제해야겠죠?
$ unpackbootimg -i boot.img
이 명령으로 아래와 같은 파일들이 생성됩니다.
boot.img-base
boot.img-cmdline
boot.img-pagesize
boot.img-ramdisk.gz
boot.img-zImage
여기서 수정할 파일은 boot.img-ramdisk.gz 이라는 것을 알아두고 그 다음 split_bootimg 를 실행합니다.
$ split_bootimg ./boot.img
결과물은 boot.img-kernel 입니다.boot.img 에서 boot.img-ramdisk.gz boot.img-kernel 을 따로 빼놓는 것입니다. 나중에 mkbootimg 에서 다시 boot.img 를 조립할때 사용됩니다.
그럼 필요한 파일은 다 생성되었고 이제 본격적으로 수정을 하기위한 작업을 합니다.
$ mkdir boot_img
$ cd boot_img
$ mv ../boot.img-ramdisk.gz ./
$ gzip -d ./boot.img-ramdisk.gz
$ cpio -i -F boot.img-ramdisk
이제 폴더의 내용을 보면 아래와 같습니다.
boot.img-ramdisk dev/ init.arabica.invmpu.rc* init.modem.rc* lib/ sbin/ system/
charger* file_contexts init.arabica.rc* init.rc* proc/ seapp_contexts ueventd.arabica.rc
data/ fstab.arabica init.arabica.usb.rc* init.trace.rc* property_contexts sepolicy ueventd.rc
default.prop init* init.environ.rc* init.usb.rc* res/ sys/
더 이상 필요없는 boot.img-ramdisk 는 삭제 합니다.
$ rm boot.img-ramdisk
이제 폴더에서 수정할 파일을 수정합니다.
그리고 다시 해체된 파일들을 압축해야합니다.
$ find . | cpio -o -H newc -O ../boot.img-ramdisk
$ cd ..
$ gzip boot.img-ramdisk
$ mkbootimg --cmdline "`cat boot.img-cmdline`" --base 0x`cat boot.img-base` --pagesize 2048 --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz -o boot.img.new
이제 boot.img.new 라는 파일이 새로 생성 되었습니다.
안드로이드 폰에 넣기만 하면 되겠죠?
fastboot 로 부팅한 다음
fastboot flash BOOT boot.img.new
이제 모든 것이 완료 되었습니다. 스마트폰을 다시 부팅해서 변경된 사항을 확인하면 됩니다.
표로 정리해 보는 사고싶은 폰 LG G3 스펙과 살 수 있는 폰 G3 beat 스펙 비교 (0) | 2014.08.20 |
---|---|
Rozetked 에서 만든 갤럭시 S4 동영상 (0) | 2012.12.28 |
구글 넥서스 7 스펙 (사양) 과 갤럭시 탭2 7.0 스펙 비교 및 구글 Nexus 7 가격 논란 (3) | 2012.12.21 |
갤럭시 그랜드 스펙 (삼성전자의 최신 스마트폰) / 갤럭시 그랜드 사양 (1) | 2012.12.19 |
갤럭시 탭2 7.0 vs 아이패드 미니 스펙 비교 (Galaxy TAB 2 7.0 vs i-Pad mini) (2) | 2012.12.18 |