상세 컨텐츠

본문 제목

split_bootimg.pl, unpackbootimg 와 mkbootmig 사용법으로 android boot.img 수정하기

Phone

by 휀스 2014. 9. 5. 00:56

본문



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


이제 모든 것이 완료 되었습니다. 스마트폰을 다시 부팅해서 변경된 사항을 확인하면 됩니다.




관련글 더보기