[Dev] ClockWorkMod-based Recovery Porting (CWM 리커버리 포팅 강좌) / 개발자용 글
안녕하세요~
winpower7 입니다. 별명으로 '이카로스' 라 하겠습니다.
먼저 이 방법은 저 역시 초보 개발자 이기 때문에...저 역시 다른글을 보고 배웠지만
그 글들을 모두 모아, 쉽고, 최대한 제가 할수 있는 능력안에선 다 해드릴려고 합니다.
일딴 CWM리커버리를 포팅 하는 데에는 2가지 방법이 있습니다.
첫번째는 Windows 에서도 클릭 몇번으로 포팅이 가능 합니다.
하지만 삼성 갤럭시 디바이스 처럼 몇몇 약간 다른 방식의 파티션을 사용하는 기기들은 불가능 합니다.
또한 LG전자의 1~2세대 디바이스 처럼 기본 리커버리가 없는 폰 역시 불가능 합니다.
※요즘 나온 펌웨어는 리커버리가 기본적으로 들어있습니다. LG폰역시...하지만 리커버리 파티션 부팅이 안될뿐;
첫번째 쉬운 방법은 두번째 글 마치고 쓰겠습니다. 뭐 네이버에 널렸으니...
그전에 손가락 운동 한번^^
하지만 우린 우분투를 이용한 CWM-based Recovery 를 포팅해 보겠습니다.
먼저 다음과 같은 개발환경이 되어야 합니다.
- x64 지원 CPU / 64비트 지원 CPU
└ 32비트 컴퓨터에선 빌드조차 되지 않습니다. 확인법은 CPU-Z 등을 이용해 주시면 감사하겠습니다.
- 우분투 10.x 이상의 ISO 또는 설치된 컴퓨터
└ 가상 컴퓨터로 돌리셔도 됩니다. 하지만 윈도우가 설치되어 있다면, 쉽게 우분투를 덮어쓰기 형식으로 설치 할수 있으니 참고바랍니다. 우분투는 오픈소스 운영체제 임으로, 네이버에서도 합법적으로 구하실수 있습니다. / 저는 우분투 10.10 환경에서 진행 합니다. / 커널은 2.6.35-22
- 루팅이 된 안드로이드 디바이스
└ 개통이 안된 기기도 가능 합니다. / 저는 LG 옵티머스Q2로 글을 진행 합니다.
- 여러가지 정신들...인내심, 전기료에 대한 걱정 (인터넷 속도가 개똥이신분만 걱정하심 되요), 강인함과 굳은 마음
1. 우분투 운영체제를 설치 합시다.
※이 부분에는 사진이 단 한장도 없습니다. 죄송합니다.
우분투...안드로이드 개발자 분이시라면 한번쯤은 들어 보신 말 입니다.
우분투는 윈도우와 같은 하나의 운영체제 입니다. 여기서 우분투를 알아 뭐 알건 없고
그냥 본론으로 갑니다.
전 우분투 10.10 환경에서 진행 합니다. 완전 초보자 이시라면, 가장 구하기 쉬운 12.xx를 통해 다른 12.xx 글을 보시거나
10.10 을 구하여, 저랑 동일한 환경에서 포팅하시는것도 좋습니다.
먼저 가상 윈도우로 우분투를 설치 할것인지, 우분투를 아예 포멧후 설치 할것인지, 우분투를 윈도우와 쓰면서 듀얼 부팅을 할것인지, 우분투를 윈도우 안에 설치 할것인지 정하셔야 합니다.
가상 윈도우로 하시는 방법은 그닥 추천 드리지 않음으로 (하지만 개발에는 훨씬 편합니다. 단 좀 짜증날뿐)
전 윈도우 위에 우분투룰 설치하겠습니다.
우분투 ISO 파일을 받으셨다면, 윈도우에서 알집이나 7zip 등으로 압축을 푸신후 폴더에 가보시면
"webui.exe" 라는 파일이 있습니다. 그 파일을 실행 하시면
"윈도우 위에 우분투 설치" 라는 버튼이 2번째에 있습니다. 그걸 그냥 클릭 하시면 됩니다.
기본적인 정보를 입력하신후, 하드디스크는 30GB로 잡아 주시는걸 추천 드립니다. 나중에 하드 공간이 없어 포멧하시는 일은 없기를...
윈도우 위에 우분투를 설치하시면, 포멧 없이 윈도우와 우분투를 듀얼 부팅하셔서 사용하실수 있습니다.
프로그램 추가/제거에서 우분투를 다른 프로그램과 동일하게 지우실수 있습니다.
기본적인 정보와 비밀번호 설정을 다 하셨다면, 다음을 눌러 기본적인 파일 설치를 합니다.
그런후 '지금 재부팅' 을 하여, 듀얼 부팅에 시도 합니다.
듀얼 부팅이란걸 처음 하시는 분은 아마 기본 설정인 30초 동안 윈도우 부팅전 새로운 화면이 보입니다.
Windows Boot Manager 인가요...가 나옵니다.
거기서 방향키와 엔터를 사용하여, 'Ubuntu' 로 부팅을 합니다.
그럼 약 10~20분 동안 언어팩등 여러가지 설치를 하게 됩니다.
이 부분은 이렇게 끝났습니다.
원래 글을 나눌려 했지만 귀찮아 져서, 그냥 씁니다.
2. 기본 셋팅 및 CM소스를 받아 보자
※참고로 복사 붙여 넣기가 안되시는 분들은, 맨 아래 첨부파일에서 복사 붙여넣기 해주세요.
아아...여기서 이제 욕이 나옵니다. 인터넷이 느리신 분은 엄청난 전기료가 나오실수 있습니다.
엄청난 시간이 소요 됩니다. 가상 윈도우에 경우 여기서 좀 걸리실수 있습니다.
서버가 외국에 있어 약 10~300kbps 의 속도로 받아 집니다.
하지만 동시에 받는 기능과 이어 받기 기능이 있어 참 좋습니다.
2-1. 프로그램 -> 보조 프로그램 -> 터미널 을 실행 합니다. (조합키 Ctrl + Alt + T 로도 실행 가능)
2-2. 이제 다음과 같은 글을 터미널에 복사 붙여 넣기 합니다.
sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ libxml2-utils
붙여 넣기를 하면 다음과 같은 메시지가 나옵니다.
[sudo] password for 사용자명:
여기서 영어로 자신의 비밀번호를 입력 합니다.
이때 입력이 안되신다구 당황하시지 마십시오. 안보일뿐 입니다. 한글로 입력하시면 한글이 보입니다. 지워지시구 영어로 전환하여 주십시오.
만약 다음과 같이 E:무엇을 설치할 수 없습니다. 라고 나온다면, 그 부분을 빼고 복사해 붙여 넣기 합니다.
※ 붙여 넣기는, 터미널 안에서 오른쪽 마우스 클릭 -> 붙여 넣기를 통해 붙여 넣을수 있습니다.
또한 E:무엇을 설치할 수 없습니다. 라고 나온다면, 그 파일을 다음 양식에 넣어 입력 합니다.
sudo apt-get install 패키지이름
예) sudo apt-get install lib32ncurses5-dev
※ 업데이트가 필요 하다고 나오는 경우엔
sudo apt-get update 패키지이름
예) sudo apt-get update zip
자자 이제 가장 중요한 CM소스를 받을 차례 입니다.
받기전에 기본 설정을 위해 repo 를 해야 합니다. 뭐 CM소스를 받는 일이죠
홈 폴더로 이동을 해야 합니다. 다음을 입력 합니다.
cd /home/(사용자계정명)
예) cd /home/icaros
그다음은 이제 BIN 이라는 폴더를 만들어 줘야 합니다.
mkdir bin
이제 만들었다면, 이동을 해야 겠죠?
cd bin
그 다음은 BIN을 기본 패치 장소로 지정 해야 합니다.
export PATH=$PATH:~/bin
그 다음은 REPO 사이트로 부터 기본적 설정을 받아와야 합니다.
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
이제 받기 위한 준비를 해야 합니다. repo 라는 파일에게 권한을 줍니다.
chmod a+x ~/bin/repo
이제 home/icaros/android/system 이라는 폴더를 만듭니다.
mkdir -p ~/android/system
이제 /android/system 으로 이동 합니다.
cd ~/android/system
이제 CM소스를 받아야 하는데, 여기서 기기를 살펴야 합니다.
안드로이드 버전 마다 받아야 하는 파일이 다릅니다.
설정 -> 휴대폰 정보 -> Android 버전 확인후
4.0.x 인경우 / repo init -u git://github.com/CyanogenMod/android.git -b ics
4.1.x 인경우 / repo init -u git://github.com/CyanogenMod/android.git -b jellybean
2.3.x 인경우 / repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
2.2.x 인경우 / repo init -u git://github.com/CyanogenMod/android.git -b froyo
2.1.x 또는 2.0.1 인경우 / repo init -u git://github.com/CyanogenMod/android.git -b eclair
1.6.x 인경우 / repo init -u git://github.com/CyanogenMod/android.git -b donut
1.5.x 인경우 / repo init -u git://github.com/CyanogenMod/android.git -b cupcake
으로 중 하나를 입력해 주시면 되겠습니다.
이클레어와 컵케익은 저 주소가 정확한지 모르겠습니다. 이클레어는 소스가 맞다면 받아 지고, 컵케익은 주소가 맞아도 아직 파일이 있을지 의문 입니다...CM3은 배포 중단된지 오래라는데...
저는 이번 옵티머스Q2 의 ICS 버전의 CWM를 포팅 함으로, ics를 입력했습니다.
이젠 파일을 받아야 합니다. 엄청난 인내심과 끈기가 필요 합니다. 컴퓨터에 따라 받는 속도가 다릅니다.
repo sync
※ 참고 : repo sync -j 16 같이 뒤에 -j 숫자 를 붙이면 한번에 여러개의 파일을 받습니다.
2부터 최대 80까지를 입력할수 있습니다. 하지만 80은 누락될 위험도 있기에, 보통 16을 사용합니다.
전 50으로 받았습니다. / repo sync -j 50
다 받아 지셨다면, 다음을 입력 합니다.
make -j4 otatools
그 다음 아래 첨부파일을 받아
/home/(사용자 계정명)/bin 에 넣습니다.
그 다음은 자신의 폰의 부트이미지를 추출 해야 합니다.
성공적으로 부트 이미지가 추출 되었다면, 이제 본격적인 리커버리 제조에 들어 갑니다.
추출된 부트 이미지는 /home/(사용자계정명)/mydroid 에 넣어 주시면 되겠습니다.
터미널에서 다음을 입력합니다.
. build/envsetup.sh
※컴퓨터를 재부팅후 다시 터미널로 접속 할떈 'cd /home/(사용자 계정명)/android/system' 을 입력해 줘야 합니다.
이제 부트 이미지를 해체 해야 합니다.
그럼으로 mkvendor.sh 를 사용하여, 부트 이미지를 해체 합니다.
build/tools/device/mkvendor.sh 제조사 기기명 /mydroid/boot.img
예) build/tools/device/mkvendor.sh lge lu6500 /mydroid/boot.img
예) build/tools/device/mkvendor.sh sky ima760s /mydroid/boot.img
예) build/tools/device/mkvendor.sh samsung shwm110s /mydroid/boot.img
다 되셨다면, 직접 마우스를 이용하여
/home/(사용자계정명)/android/system/device/제조사/기기명 으로 이동하시면
recovery.fstab 이랑 boardconfig.mk 이 있습니다.
요 두파일을 자신의 폰에 알맞게 수정 해야 합니다.
먼저 recovery.fastab 를 텍스트 편집기로 열어 봅니다.
그럼 이런 대충 비슷한 내용이 나옵니다.
이건 옵티머스Q2의 파티션 정보 입니다.
# mount point fstype device [device2]
/boot emmc /dev/block/mmcblk0p7
/cache ext4 /dev/block/mmcblk0p3
/data ext4 /dev/block/mmcblk0p11
/recovery emmc /dev/block/mmcblk0p1
/sdcard vfat /dev/block/mmcblk1p1
/system ext4 /dev/block/mmcblk0p2
/misc emmc /dev/block/mmcblk0p5
/nvarea emmc /dev/block/mmcblk0p6
/emmc vfat /dev/block/mmcblk0p13
/마운트포인트 파티션 위치
로 적어 주시면 됩니다.
기본 리커버리가 있으시다면, 그 리커버리를 부트이미지 분해 하듯이 분해 하시면
저 파일의 내용이 나옵니다. 그걸 적어 주시거나 안나오시면
핡...개노가다 입니다...전 nvflash 로 구하는 테그라 계열 방법밖에 모르겠습니다. 죄송합니다...ㅠㅠ
이제 boardconfig.mk 파일을 열어 줍니다. 다음 비슷한 내용이 나옵니다.
이건 제 컴퓨터에서 해체한 옵티머스Q2의 파일 입니다.
USE_CAMERA_STUB := true
# inherit from the proprietary version
-include vendor/lge/lu6500/BoardConfigVendor.mk
TARGET_NO_BOOTLOADER := true
TARGET_BOARD_PLATFORM := unknown
TARGET_CPU_ABI := armeabi
TARGET_BOOTLOADER_BOARD_NAME := lu6500
BOARD_KERNEL_CMDLINE :=
BOARD_KERNEL_BASE := 0x10000000
BOARD_KERNEL_PAGESIZE := 2048
# fix this up by examining /proc/mtd on a running device
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00800000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x1400000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0x22400000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_FLASH_BLOCK_SIZE := 131072
TARGET_PREBUILT_KERNEL := device/lge/lu6500/kernel
#BOARD_HAS_NO_SELECT_BUTTON := true
# Use this flag if the board has a ext4 partition larger than 2gb
#BOARD_HAS_LARGE_FILESYSTEM := true
이 파일은 원래 리커버리가 있으시다면, 당연 풀어서 보시면 되지만 없는 디바이스 일경우
adb shell 또는 안드로이드 터미널 에뮬레이터에서 su 입력후 'cat /proc/mtd' 를 입력하시면 나옵니다.
그래두 못구하시겠다면, 좀 다른 방법을 사용해야 합니다. 여기서 나오는 값은 보드 커널 페이지사이즈랑 보드 커널 베이스 입니다.
BOARD_BOOTIMAGE_PARTITION_SIZE := 부트 파티션 크기를 16진수로 적습니다.
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 리커버리 파티션 크기를 16진수로 적습니다.
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 시스템 파티션 크기를 16진수로 적습니다.
BOARD_USERDATAIMAGE_PARTITION_SIZE := 데이터 파티션 크기를 16진수로 적습니다.
BOARD_FLASH_BLOCK_SIZE := SD카드 파티션 크기를 16진수로 적습니다. / 는 잘 모르겠어요.
이제 boardconfig.mk 파일을 한글자 라도 수정해 저장했다면, 명령을 실행해 줘야 합니다.
make clobber
그런후, 이제 본격적으로 리커버리 이미지 생성전 준비를 해 둡시다.
lunch full_기기명-eng
예) lunch full_lu6500-eng
핡핡...이제 드디어 리커버리 이미지를 생성해 봅시다^^
make -j4 recoveryimage
make clobber
lunch full_기기명-eng
make -j4 recoveryimage
여기서 주의할점이 있습니다.
여기서 뭐라뭐라 나오면서 안되는 경우도 있는데....
그럼 혹시 원래 폰의 리커버리 파일을 뜯으신적이 있나요?
기본 리커버리를 이 방법으로 뜯으셨다면, 그 파일을 삭제해 주셔야 합니다.
를 입력후 엔터를 딱! 하시면 약 3분 가량 후에
android/system/out/target/product/기기명 폴더 안에 recovery.img 가 있답니다!
만약 에러가 뜨신다면, 위에서 수정한 두 파일 수정이 잘못된것 입니다.
전 커널 페이지 값에서 한참 헤맷습니다...ㅠㅠ
Windows OS에서 보실경우 아래 파일을 받아 주십시오.
'iCAROS Works > 안드로이드 따라하는 개발' 카테고리의 다른 글
LG 옵티머스 ICS(아이스크림샌드위치) 전기종 화이트 UI제거 하기 (0) | 2012.11.24 |
---|---|
LG 옵티머스 ICS (아이스크림 샌드위치)에서 안드로이드 순정 잠금화면 사용하기 (2) | 2012.11.24 |
[Dev] ClockWorkMod-based Recovery PowerOFF 종료 파워 오프 버튼 추가하기 / 개발자용 글 (0) | 2012.11.13 |
[Dev] ClockWorkMod-based Recovery 키값 바꾸기 / 개발자용 글 (0) | 2012.11.13 |
[쿠킹] CM7 또는 AOSP를 기반으로 MIUI 포팅하기 (1) | 2012.10.05 |