오늘은 GKI 빌드를 시도해봅니다.

GKI는 안드로이드에서 Treble의 거진 마지막 단계로, 플랫폼뿐만 아니라, 커널도 단일된 하나의 커널을 쓰겠다는 정책입니다. 현재 안드로이드 플랫폼은 제조사마다 여전히 차이가 있지만, 개발단계에서는 GSI를 사용하여, 업데이트가 벤더에 의존하지 않고 독립적으로 될 수 있도록 테스트등을 진행하도록 하고 있습니다. 물론… 잘 되고 있는지는 의문입니다만, 결국 구글의 것은 구글의 것대로 하나로 관리하겠다는 의도로 보입니다. 여태까지는 제법 잘 굴러가고 있지만, 부담이 없는건 아니겠지요.

아무튼 GSI AOSP던 GKI던 모두 근본 오픈소스 프로젝트에 기반하여, 코드는 공개되어 있고, 모두 확인하고, 빌드하고,, 기회가 있다면, 단말이나, 가삼머신에서 실행해 볼수 있겠죠.. 그래서,, 해봅니다. 오늘은 GKI입니다.

커널 소스는 안드로이드 사이트에 구글치고는 꽤 상세한 설명과 함께, 코드 접근 방법등이 설명되어 있습니다.
https://source.android.com/devices/architecture/kernel

코드는 아래에서 접근이 가능하겠고요.
https://android.googlesource.com/kernel/common/

현재 최신 버전의 안드로이드에 밀고 있는 커널은 5.4커널입니다. 이번에 Ubuntu 20.04 LTS도 5.4커널이라고 하지요. 문서화 된 내용들을 보면, 상당히 깊이가 있고, 뭔가 안드로이드 특화된 기능들이 많이 기술 되어 있는데요. 현재 안드로이드 커널과, 리눅스 커널은 약간 밀당 관계라, 리눅스 mainline upstream으로 들어가는것도 있고, 여전히 못들어가고 Android mainline에서만 들어가고 있는 것들이 있습니다. 나름 기술적인 의도로 대부분 판단하지만, 이게 또 정치판하고 같아서, 패치하나로 설전이 오가는 메일쓰레드 구경하는 것도 재미가 제법 쏠쏠합니다.

아무튼 코드를 받아서 빌드를 시도해봅니다. 머신에 여타 빌드 환경같은것 설정한게 없으니, 무작정 돌려봅니다.
make gki_defconfig 돌리면 처음 맞이하는게
scripts/Makefile.host:9: recipe for target ‘scripts/kconfig/lexer.lex.c’ failed

네 학교에서 배운 기억이 납니다. Lexer가 없네요.. 오픈소스에서 컴파일 하면 들어가야 하는, 그러니까. GCC, G++같은 컴파일러를 만들고자 할때 쓰는. 구문해석기. BISON, FLEX를 깔아줍니다. 원래는 LEX/YACC지만.. 오픈소스 Free Software니까…

빌드 2차시도
error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel
네. 바이너리 관련해서 또 처리를 못하네요.. 앞에 두개만 깔고 다시 시도해봅니다. 근데 libelf-dev는 없다고 나오네요.. Ubuntu 18.04인데.. 그냥 하나만 깔고 시도해봅니다.

scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: 그런 파일이나 디렉터리가 없습니다
#include
^~~~~~~
compilation terminated.
scripts/Makefile.host:107: recipe for target ‘scripts/extract-cert’ failed
make[1]: *** [scripts/extract-cert] Error 1
make[1]: *** 끝나지 않은 작업을 기다리고 있습니다….

자 이제 생각없이 안깔아본 세번째를 깝니다. 세번째도 없네요.. 흠.. 첫번째 제안 패키지만으로는 아직 뭔가 부족한가봅니다.
구글신게 도움을 요청합니다.
https://github.com/TinkerBoard/debian_kernel/issues/26
libssl-dev 라고 하는군요

뭔가 HDRINST라는게 무식하게 많이 찍히고, HDRTEST가 많이 찍히고, 평소 보던 CC/AR 이 간간히 보입니다. 헤더 다루는게 예전보다 더 많아진 모양입니다. Precompiled Header하고 하기에는, 같은게 너무 많이 반복적으로 나오는게, 좀 비효율인 처럼 보이기도 하네요..

빌드가 잘 진행되는데,, 생각보다 많이 느려서, top으로 잠시 살펴봅니다… 별 생각 없이 ntfs로 포맷한 SSD에다 받아놓고 빌드를 했는데, mount.ntfs가 CPU 50%이상을 먹고 있네요 –;; 화딱지 나서, 받아놨던걸 살짝 옮겨놓고, ext4로 다시 밀어버리고 빌드를 합니다. 이제야, 70%대에서 놀던 CPU들이 90%까지 바득바득 일을 하기 시작하네요.. 역시 순정(?)이 좋습니다.