티스토리 뷰

저번 빌드 환경 구축에 이어 2번째 강좌입니다

이글이 다른분들께서 읽으실지는 모르겠지만 ㅠ

아무튼 첫 1) 에서 말한것 처럼 제가 경험한 모든것을 쏟아 부은 강좌가 되도록 노력하겠습니다!



0. 사전 필독 글들 && 관련 글들

이 글은 기본적으로 리눅스/우분투에 대한 지식이 있어야 합니다

여기서의 지식이란 굉장한 것이 아니라 그냥 조금 가지고 놀아봤다 정도면 됩니다

기본적인 지식으로 질문하시면 대단히 힘듭니다 ;;


필독글

2013/05/25 - [강좌/팁/커널/빌드 강좌] - 1) 안드로이드를 빌드하기 전에 빌드 환경을 구축하자


관련글

2013/03/31 - [강좌/팁/커널/빌드 강좌] - 버전별 CyanogenMod의 소스를 다운받자!

2013/02/03 - [강좌/팁/커널/빌드 강좌] - 나도 CM7 포팅해 보자 - 디바이스 소스와 벤더를 짜자

2013/01/28 - [강좌/팁/커널/빌드 강좌] - 나도 CM7 포팅해 보자 - CWM을 포팅해보자


기본적인 빌드 환경이 구축되었다고 생각하고 강좌 진행하도록 하겠습니다



1. repo init

우리는 전 강좌에서 repo를 받았습니다

이 repo로 소스를 다운받을건대요

처음으로 repo에게 어떤 소스를 받을것 인지 알려줍시다


먼저 폴더를 생성해야 겠지요?


mkdir ~/cm-10.1

cd ~/cm-10.1


이제 repo에게 "이 폴더에 이 소스를 받을거야"라고 말해 봅시다


repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1


이런씩으로 repo에게 어떤 소스를 받을건지 지정해 주시면 됩니다


뒤에 있는 cm-10.1에 버전명을 넣으면 되는데요


@GingerBread 이하

eclair

froyo

froyo-stable


@GingerBread

cm-7.0.0

cm-7.0.1

cm-7.0.2.1

cm-7.0.3

gb-release-7.2

gingerbread

gingerbread-release

 

@ICS

ics

ics-release

cm-9.0.0

cm-9.1.0

 

@JellyBean

cm-10.1

jellybean

jellybean-release

jellybean-stable


이정도의 목록이 가능합니다


원하시는 버전을 넣어 repo init를 해주시면 됩니다



2. repo sync

이제는 소스를 받아야 합니다


repo sync


이렇게 입력하시면 소스의 다운로드가 시작됩니다

되도록 유선으로 받으시길..


프로세스를 더 할당하여 속도를 높일수 있는대요

뒤에 -j(숫자)를 입력해 주시면 됩니다

예를 들자면


repo sync -j8


이런씩으로 말이죠


이제 밥을 먹고 오시던지 놀다 오시던지 나갔다 오시던지 하시면 소스 다운이 완료됩니다

1시간 안에 받을 생각을 하셨다면 바로 지워버리세요

대략 2~3시간 정도 걸립니다, 빠르면 1시간에도 받더라고요



다운이 다 될경우 위와 같은 창이 뜨게 됩니다

Done이 뜰경우 완료된것 입니다


업데이트 확인을 위해 repo sync를 다시한번 입력해주세요.



3. 디바이스 소스 생성

Cyanogenmod 풀소스에 들어가신다음 device폴더에 들어가시면 현재 소스에 있는 디바이스 소스가 있습니다

cm7까지만 해도 소스 다운로드시 device소스도 모두 다운이 되었는대 지금은 device소스는 받지 않는거 같습니다

소스의 크기가 너무 커지는거 같기 때문이라 생각되는군요

소스를 받는 방법은 2~3가지가 있습니다 천천히 보도록 하겠습니다


(1) CyanogenMod 공식 지원 기기

https://github.com/cyanogenmod

이 github 사이트에 들어가신다음 자신이 빌드하고자 하는 기기를 찾아 주소를 복사해 주세요


우분투로 넘어와서 폴더를 하나 만든다음 터미널에 아래와 같이 다운로드 해주세요


git clone (복사한 주소)


만약 버전이 다르다면 버전을 입력해 주셔야 합니다


git clone (복사한 주소) -b (버전명)


예를 들면 git clone https://github.com/CyanogenMod/android_device_samsung_crespo -b cm-10.1

이렇게 입력해 주시면 됩니다


그럼 자동으로 git이 파일을 받아와 저장합니다


만약 그냥 웹사이트에서 바로 다운로드 하려면

ZIP을 클릭해 주시면 몇초쯤뒤 다운로드가 됩니다


디바이스 소스가 모두 다운로드 되었으면 이제 vendor을 짜야 합니다

cd device/(제조사)/(기기명)로 터미널로 진입하신다음 기기를 USB로 연결하세요

그다음 adb devices로 연결을 확인하시면 됩니다


그 뒤


./extract-files.sh


을 입력하여 필요한 파일을 기기에서 pull하게 해주세요


제가 사용하는 넥서스S의 경우 구글의 sh드라이버 지원이 끊겼습니다...

레퍼런스의 지원이 끊기다니..

이경우에는 Cyanogen에서 벤더를 제공하지 않으면 커스텀 벤더를 가져와야 하는데요

TheMuppets라는 팀의 벤더를 가져와서 사용해 봅시다


device/samsung/crespo에 들어가셔서 self-extractors을 보시면 필요한 벤더 파일을 보실수 있습니다

이제 git clone으로 파일을 받아야 하는데요

git clone은 아래와 같은 구조로 이루어져 있습니다


git clone (가져올 repo주소) -b (가져올 브런치 이름)


그럼 아래 박스를 입력하여 벤터를 가져와 봅시다


git clone git://github.com/TheMuppets/proprietary_vendor_akm.git -b cm-10.1

git clone git://github.com/TheMuppets/proprietary_vendor_broadcom.git -b cm-10.1

git clone git://github.com/TheMuppets/proprietary_vendor_imgtec.git -b cm-10.1

git clone git://github.com/TheMuppets/proprietary_vendor_nxp.git -b cm-10.1

git clone git://github.com/TheMuppets/proprietary_vendor_samsung.git -b cm-10.1

git clone git://github.com/TheMuppets/proprietary_vendor_widevine.git -b cm-10.1


이제 다운받은 폴더의 이름을 변경하여 봅시다


mv proprietary_vendor_akm akm

mv proprietary_vendor_broadcom broadcom

mv proprietary_vendor_imgtec imgtec

mv proprietary_vendor_nxp nxp

mv proprietary_vendor_samsung samsung

mv proprietary_vendor_widevine widevine


mv명령어는 파일을 이동할때 쓰이지만 파일명 또는 폴더명을 변경할때도 사용됩니다



(2) CyanogenMod 비공식 지원 기기 - 개발자분의 github에서 소스 다운

이 방법은 device소스가 개발자분의 github등에 있는 경우 입니다

이때는 github에서 소스를 찾아 git clone으로 다운로드 하면 끝입니다 ㅎ


예를들어 hPa님의 github에서 소스를 다운로드 해봅시다

hPa님의 github주소는 https://github.com/985hPaKicK 입니다

원하는 repo의 주소를 복사한뒤 위와 같이 git clone으로 다운로드 해주시면 됩니다


hPa님의 github에 있는 ef46l(베가레이서2)기기의 cm10소스를 받는다고 하면



이렇게 다운로드가 가능하겠군요 ㅎ



(3) 직접 디바이스 소스 생성

이 케이스가 가장 까다로운 방법입니다 -_-

그리고 가장 어렵습니다..


디바이스 소스를 만드는 방법에도 2가지 정도가 있습니다

먼저 한 방법은 이미 비슷한 기종의 소스를 빌려오는 방법입니다


이 방법으로 소스를 생성하는 방법은 일단 포팅하고자 하는 기기와 스펙이 비슷한 기기를 찾습니다

저는 이자르(?)소스로 미라크a에 맞는 cm7소스를 만들었습니다

해상도, AP, 와이파이 칩셋등이 비슷한 기기를 찾아 그 기기의 config을 빌려오면 됩니다 ㅎ


찾는 방법은 다양합니다

https://github.com/CyanogenMod 에서 찾을수도 있고

개발자 께서 올려두신 첨부파일로도 찾을수 있고

etc..


두번째 방법은 직접 소스를 만드는 방법입니다

Aㅏ... 이 글로 설명하기 진짜 힘들고 어려운 방법입니다

주변 비슷한 스펙중 CyanogenMod 정식 지원기기가 없고, 개발자분들도 없을때는 직접 소스를 짜셔야 합니다


어느 글에서 "이글만 보면 소스를 짤수 있습니다"라는 내용이 있다면 그건 거짓입니다 한 포스팅으로 소스 짜기는 아주 어렵다고 생각되는군요


아직 제 능력이 좋지 않아 이부분은 간단하게 설명해 드리겠습니다

안드로이드 풀소스안 device/(제조사)/(코드네임) 폴더를 생성하신 다음

BoardConfig.mk, device_(코드네임).mk등의 파일을 생성해야 합니다

build/tools/device/mkvendor.sh으로 디바이스 소스의 기초를 생성할 수 있습니다

순정 boot.img가 필요합니다


build/tools/device/mkvendor.sh (제조사) (코드네임) (부트이미지경로)


이렇게 입력해 주시면 기초적인 빌드에 필요한 파일, 즉 BoardConfig.mk등이 생성되어 나옵니다


그다음은 완전 노가다 입니다

cmdline등과 각종 Config설정을 BoardConfig.mk에 넣어주고 필요한 파일은 device_(코드네임).mk에 추가해 주고..

2013/01/28 - [강좌/팁/커널/빌드 강좌] - 나도 CM7 포팅해 보자 - CWM을 포팅해보자

이 글과 대체적으로 비슷하다고 생각하시면 됩니다



4. 빌드

이제 디바이스 소스를 생성하였습니다

터미널로 이동하여 빌드를 시작해 봅시다


. build/envsetup.sh

lunch full_(기기명)-eng 또는 lunch cm_(기기명)-eng

brunch (기기명)


이 3개의 명령어로 빌드를 시작할 수 있습니다


터미널을 새로 열었다면 꼭 . build/envsetup.sh를 실행해 줘야 합니다

lunch명령어는 어떤 기기를 빌드할 것인지 설정해 주는 명령어로 make -j4 recoveryimage같은 명령어로 빌드시 필요합니다

만약 리커버리를 빌드하려고 하는대 lunch를 하지 않고 make -j4 recoveryimage를 하게 되면 기본 디바이스, 즉 generic이 빌드됩니다;;

brunch (기기명)으로 빌드할때는 lunch를 하지 않아도 됩니다 자동으로 선택되어 집니다


여기서 eng는 롬파일 자체가 su를 얻는것이고 userdebug는 eng의 반대라 생각하시면 됩니다

 

빌드 명령어는 사실상 이게 끝입니다

디바이스 소스를 짜는것이 어렵고 소스의 문제가 없다면 몇시간후 zip으로 나오게 되지요 ㅎㅎ

 

그 오류 해결이 까다롭고 어려운 것이지...



이렇게 해서 이번 강좌 마치겠습니다~



출처

http://blog.naver.com/akthfdyd/50159218843

https://github.com/CyanogenMod

http://itmir.tistory.com/94

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
댓글
  • how 가이드 감사합니다.
    CM에 가보니 옵지소스도있길래 받아서 빌드해보았습니다.
    옵지가 정식지원이다보니 큰 수정없이 빌드는 잘 되는데
    기존 CM롬이 올라가있는 상태에서 리커버리로 올려봤더니 부팅이 안되더군요 결국 원복..
    차라리 빌드에러면 잡겠는데 이건 빌드는성공했는데 부팅이 안된다면 어디부터 살펴보아야 할까요?
    2013.08.07 21:14 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) 잡힌다면 로그켓을 살펴봐야 합니다
    옵지같은건 부트로더 락이 있어서 cm도 우회로 설치하지 않나요?
    옵지 유저가 아니라 잘 모르겠습니다
    2013.08.08 19:54 신고
  • ef46l lunch cm_ef46l-eng

    ls: cannot access device/*/ef46l/cm.mk: No such file or directory
    build/core/product_config.mk:233: *** Can not locate config makefile for product "cm_ef46l". Stop.
    Device ef46l not found. Attempting to retrieve device repository from CyanogenMod Github (http://github.com/CyanogenMod).
    Traceback (most recent call last):
    File "build/tools/roomservice.py", line 76, in <module>
    result = json.loads(urllib.request.urlopen(githubreq).read().decode())
    File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
    File "/usr/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
    File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
    File "/usr/lib/python2.7/urllib2.py", line 448, in error
    return self._call_chain(*args)
    File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
    File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    urllib2.HTTPError: HTTP Error 403: Forbidden
    ls: cannot access device/*/ef46l/cm.mk: No such file or directory
    build/core/product_config.mk:233: *** Can not locate config makefile for product "cm_ef46l". Stop.

    ** Don't have a product spec for: 'cm_ef46l'
    ** Do you have the right repo manifest?

    베가 레이서2 미르님 소스 다운받고 lunch 명령어 하니까 오류뜨네요.....
    2013.10.12 13:10 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) device/*/ef46l/cm.mk: No such file or directory 2013.10.13 11:24 신고
  • demake 제조사에서 재공하는 오픈소스로 빌드할수있는방법은 없을까요? 2013.11.10 19:57 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) 플렛폼 소스를 제공할탠대요
    사실대로 말하자면 이는 대부분 껍대기 입니다
    디바이스 소스를 오픈했다면 그걸 가지고 또 직접 만들어야 합니다
    제조사에서 모든 소스를 푸는 경우는 htc같은 회사 말고는 ㅎ..
    2013.11.11 21:31 신고
  • demake 살펴보니그렇네요
    f120이라
    hpa님소스로 빌드하면될듯한데
    그러면 그게cm10소슨데
    이걸로 cm10.1빌드할수있나요?
    2013.12.25 19:55 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) 네 cm10소스를 cm10.1으로 바꾸신다음 빌드하시면 됩니다 2014.01.27 13:55 신고
  • how to do 디바이스 소스를 다운받으면 압츅을풀고 어디에 집어넣어야하나요?? 2013.12.23 22:11 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) (android-source)/device/(회사)/(코드네임) 2013.12.24 15:47 신고
  • 윤준영 런치를 설치할려 하는데
    E: /var/lib/dpkg/lock 잠금 파일을 얻을 수 없습니다 - open (11: 자원이 일시적으로 사용 불가능함)
    E: 관리 디렉터리를 (/var/lib/dpkg/) 잠글 수 없습니다. 다른 프로세스가 사용하고 있지 않습니까?
    이런 구문이 뜨네요 어떻게 해야되나요?
    2014.01.13 19:45 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) 음 다시 해보시겠어요?
    말씀하신 오류는 우분투에서는 본적이 있지만 안드로이드에서 일어날수 있는지는 모르겠어요
    2014.01.14 18:25 신고
  • Favicon of http://pbdiary.pw 작은불빛 런치는 설치하는 것이 아닙니다.
    기본으로 있는 것이에요.
    2016.01.02 00:01 신고
  • Mirro 현재 빌드할려고 하는데 벤더를 짜는 부분에서 'device/(제조사)/(기기명)에 터미널로 진입하신다음 기기를 USB로 입력하세요' 이 부분이 이해가 안되네요 어떤 말씀이시죠? 2014.02.26 12:17 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) 아 오타군요; 벤더파일을 추출하는 sh파일을 실행하기 위해

    cd명령어로 device/samsung(예시)/crespo(예시)로 진입하고 스크립트를 실행하세요 란 뜻이었습니다
    2014.02.26 12:38 신고
  • 카운트 음 이제 까지 빌드 잘하고 있었는데 오늘 갑자기
    error: manifest required for this command -- please run init
    이런 오류가 뜨는 군요.
    2014.04.24 16:32 신고
  • 질문 만약 cm10아니고 cm11이면 cm10을cm11로 바꿔야하나요? 2014.12.25 20:39 신고
  • im.fehead CM에 정식 지원하지 않는 기기 적용 강좌 감사합니다.
    이글 찾느라 고생했네요 ^^
    2015.03.11 15:20 신고
댓글쓰기 폼