Ubuntu, Android

[Android] 기기연결을 통한 풀 소스코드 빌드 및 부분빌드

vhxpffltm 2019. 9. 25. 22:55

이전글에 우리는 Android 풀 소스코드를 다운받았다. 이것을 빌드하여 실제 기기에 이미지를 올려 구동시켜본다.

 

Android는 컴퓨터처럼 다양한 회사의 기술의 집합체임을 느낄 수 있다. 아래의 출처를 참고하였다.

https://programist.tistory.com/entry/Nexus-4-%EC%8B%A4%EC%A0%9C-%EA%B8%B0%EA%B8%B0-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-OS-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A0%81%EC%9A%A9%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-OS-%ED%92%80-%EC%86%8C%EC%8A%A4-%EB%B9%8C%EB%93%9C-%EB%B0%A9%EB%B2%95?category=692875

 

Device Dreiver 설치

먼저 드라이버설치가 필요하다. 사용할 기기의 드라이버를 찾아 다운받는다. 

https://developers.google.com/android/drivers

위의 주소를 참고하여 알맞은 드라이버를 설치한다. 리눅스의 경우

 

$ get [URL LINK] 명령어로 해당 디렉토리 경로에 압축파일을 받을 수 있다. 그리고 압축을 푼다. 

$ tar xvf [file_name].tgz  

압축을 풀면 extract-[file_name].sh파일이 있을텐데 이것을 이용할 것이다. 

$ ./extract-[file_name].sh 를 실행하면 라이센스 명령이 나온다. Enter를 눌러 다음으로 넘어가고 왼쪽 하단에 '--More--' 이 나오면 Ctrl+C 를 입력하여 넘어가고 이후에 'I ACCEPT ~~~~' : 라고 치라는 문구가 나온다.

I ACCEPT를 입력하면 드라이버 파일들이 소스코드에 적용이 되고 우리는 기기에 적용할 이미지 파일 생성 빌드 환경준비가 끝난다.

 

참고로 이 드라이버 파일들은 우리가 받은 풀 소스코드 파일에 'Vecdor' 폴더가 나타나게 될 것이다. I ACCEPT를 하면서 vendor/~~~~ 와 같은 내용이 보일 것이다.

 

Source Code Build

이제 준비가 끝났으니 빌드해보자.

 

$ source build/envsetup.sh

빌드환경을 설정한다. 작업 디렉토리로 이동후 명령을 하길 바란다. 다음의 명령어로 확인후,

 

$lunch

 

lunch 명령어로 빌드 하드웨어 타켓을 설정한다. 빌드하고싶은 항목의 번호를 입력후, Enter를 누르면 된다.

 

 

위와 같이 Target과 맨 마지막에 out이 보이게 된다.

 

$make -j4

위 명령어를 통해 빌드를 시작한다. 그냥 make 를 해도되며, -j4 는 보통 CPU 코어의 2배를 하면 된다. 이 과정은 최초시작시, 매우 긴 시간을 필요로 한다. 특히 가상머신을 사용했을 때, 성능에 따라 많은시간과 100GB가 넘는 용량을 요구하니 잘 확인하고 진행하면 된다.

 

결과물은 우리가 작업한 공간에 out 이란 폴더가 결과물이다. 

out/target/product/[target_name] 의 경로에 만들어져있다.

 

 

이미지 적용

이미지를 적용시켜보자. 필자는 이곳에서 에러가 발생했다. 

 

에러의 내용을 살펴보기 전에, 다음의 명령어로 빌드한 이미지를 export한다.

$export ANDROID_PRODUCT_OUT=/['녹색의root경로']/out/target/product/[target_name]

 

에러 내용은 ANDROID_COMMAND_ERROR

                error : could not load android-info~~

 

와 같은 문제가 발생했다. 아래의 내용에서 해결할 수 있었다.

https://stackoverflow.com/questions/5846197/error-could-not-load-android-info-txt

https://elecs.tistory.com/62

 

자 이제 거이 끝났다. 기기에 USB를 연결하여 디바이스가 연결되어있는지 확인할 수 있다. adb명령어로 USB에 연결된 기기에 작업한다.

 

$adb devices  로 기기가 연결되었는지 확인하고,

 

* 여기서 중요한 점이 있다. 다음으로 진행하기 전에 사용할 기기의 옵션 및 설정 그리고 디버깅 모드에서 reboot 관련 설정과 옵션을 'ON' 및 '허용' 으로 바꾸고 ATTR , OEM관련 옵션도 수정하길 바란다. 당연히 해야할 사전작업이다. 필자의 경우 이것때문에 온갖 에러에 휩쓸렸지만, 다행히 원본 이미지를 다시 덮어씌어 Android를 부팅시켜 이 설정을 모두 바꾸어 진행하였다.* 

 

 

$adb reboot bootloader

이 명령어를 실행하면 휴대폰이 죽는 모습을 본다. 아래의 이미지는 가져왔지만, 실제 기기에서 이 모양을 한 상태를 볼 수 있을 것이다.

 

 

 

$fastboot flashall

이 명령어로 죽은 Android에 새 이미지를 올린다. 이것을 진행하면 새 이미지로 Android가 부팅된다. 

기기의 '설정'에서 빌드정보를 확인하여 target_name, Device driver 정보가 우리가 설정한 정보로 되어있음을 확인할 수 있을것이다.

 

 

부분빌드

빌드한 내용에 새로운 내용을 적용시켜 확인할 때가 있을것이다. 그렇가면 그 부분만을 빌드하여 확인할 수 있는 방법이 있다. 수정한 내용이 많이 않다면 위의 과정으로 빌드 시, 많은 시간이 걸리지는 않지만 수정한 내용이 많다면 그만큼 시간이 오래 걸릴것이다.

 

부분빌드는 $source build/envsetup.sh  ->  $lunch 명령어로 똑같이 진행한다.

 

다음 mm, mmm 명령으로 그 부분만을 빌드할 수 있다. 필자는 mmm으로 파라미터로 주어진 경로들에 대해 부분빌드를 실행한다. 중요한점은 해당 경로에 .mk 파일이 있어야 가능하다.

 

~/'작업디렉토리' $ mmm /[부분빌드할 경로]

 

우리가 빌드한것과 같이 부분빌드가 성공적으로 완료되었다.

 

이후, ~/'작업디렉토리' $ make snod 명령어로 바로 이미지를 새로 생성할 수 있다.

이 이미지는 우리가 빌드한 out/target/product/[target_name] 의 system.img가 새로 바뀌게 된다.

 

확인은 해당 경로로 가서 'ls -ltr' 명령어로 시간을 뽑아서 확인가능하다.