기기가 최초 탑재한 안드로이드 버전보다 한 단계 낮은 버전을 백포팅하는 사례는 아주 가끔 있었다. (예: Android 7.0 탑재 출시 기기에 Android 6.0.1 백포팅)
기기가 최초 탑재한 Android 버전보다 훨씬 낮은 버전을 백포팅한 사례는 사실상 전무했다.
하지만 내 눈을 의심하는 글을 봤다.
지난 달, 갤럭시 S2(SHW-M250S)에 안드로이드 1.6을 백포팅한 게시물이 네이버 카페에 올라왔다. 카메라, 진동, 소리, 하드웨어 가속, 듀얼코어도 전부 살렸다는 것이다.
갤럭시 탭 A7에 안드로이드 4.1.2를 백포팅한 사례도 있고, 갤럭시 S7 엣지에 안드로이드 1.0을 부팅한 사례도 있다.
이 백포팅 사례의 특징이 Claude 또는 ChatGPT Codex를 이용했다는 것이다. 과거에는 실현이 어려운 작업을 AI 성능과 Agent가 좋아지면서 이제는 실현되고 있다. 앞으로 GPT 7, GPT 8 등 지금보다 더 좋은 성능의 모델이 나오면 말도 안 되는 것들이 계속 쏟아져 나올 것으로 예상한다.
나도 AI를 이용하여 안드로이드 백포팅 시도를 위해 갤럭시 J5 2015(SM-J500N0)를 준비했다.
목표한 백포팅 버전은 안드로이드 2.3.7 진저브레드다.
AI한테 지시하기 전 프로젝트 폴더에 갤럭시 J5 2015 순정 펌웨어와 TWRP 시스템 백업 파일을 넣어두고 나서, AI한테 PC에 WSL Ubuntu 24.04와 WSL 내에 Docker가 있다는 정보를 알려주고, 진저브레드 포팅 작업을 지시했다.
작업 초기에는 AI가 빌드 환경 세팅, 사전 탐색을 준비했다. 사전 탐색 단계에서는 AI가 adb shell getprop ro.product.model 명령어 실행을 요구하여 출력 정보를 복사, 붙여넣기하여 답변했다.
그 다음은 AI가 순정 펌웨어와 TWRP 백업의 커널, ramdisk를 분석, 진저브레드 정보를 분석하고, Android 2.3.7 AOSP 소스코드를 다운로드하여 분석을 진행한다.
어느 정도 작업이 진행되면 AI가 진저브레드의 실기기 호환성 검증을 위해 최소 부팅 이미지인 boot.img를 생성해주고, TWRP에서 boot.img를 설치해줄 것을 사람한테 지시한다. AI 지시를 따라주면 최소 부팅에 성공한다.
처음에는 Galaxy J5 2015 로고만 계속 떠 있어서 진전이 없는 줄 알았지만, 최소 부팅은 성공해서 adb 사용이 가능하여 호환성 검증이 가능한 상태였다.
AI는 처음부터 GUI를 띄우려고 작업하는 것이 아닌, Shell, Binder, ashmem, logger 등을 검증하고 boot.img를 여러 번 수정한다.
boot.img를 여러 번 수정하면서 Dalvik, Java, zygote 검증, Android 화면 출력의 밑바탕이 되는 system_server 등을 개선해나간다.
어느 정도 안정화가 되면 AI는 실제 system 파티션에 안드로이드 진저브레드를 설치하는 것이 아닌, adb로 ramdisk.cpio.gz를 전송한 뒤 system. efs 파티션 등은 마운트하지 않은 상태로, 안드로이드를 램 디스크로 부팅하는 작업을 진행한다.



화면 출력을 위해 총 9번의 boot.img 수정이 있었다.
부팅 후에는 터치가 되지 않는 등 정말 화면만 출력하는 수준이었다.
AI한테 순차적으로 지시하여 화면 출력이 깨지는 문제를 해결하고 터치, 전원 버튼, 볼륨버튼, 홈버튼, 소리, 진동, 화면 밝기 조정을 작동하게 만들었다.
GPU 가속은 난황이 될 것을 우려하여 미루다가 밑져야 본전이라는 생각으로 과감하게 지시했다.
갤럭시 J5 2015 안드로이드 롤리팝 순정 GPU 드라이버와 진저브레드의 화면 버퍼 ABI가 달라 직접 연결이 어려운 문제가 있었다. AI는 우선 GPU가 렌더링한 결과를 기존 화면 버퍼로 복사해 표시하는 어댑터를 만들어 돌파했다.
물론 정사각형 큐브 모양 회전 렌더링에서 1FPS 정도만 나오는 처참한 결과를 보이긴 했다.
측정상 CPU 복사는 약 3.5ms, 패널 전달은 약 2~10ms인데 GPU 화면을 읽는 단계만 약 490ms가 걸렸다.
GPU에서 처리>CPU 화면 출력이 병목이었던 것이다. GPU 가속 성능 개선을 AI한테 지시하니 앱과 합성기가 ION 버퍼를 직접 공유하도록 바꿔줬다. 렌더링 성능이 대략 60FPS가 나오는 것을 확인했다.

감탄의 연속이었다. 불과 1~2년 전이었으면 GPU 가속을 위해 엔지니어들이 몇 주~수 개월을 쏟아부어 구현해야 하는 것을 AI는 단 2시간 만에 구현했다.
아직 더 궁금한게 있어서 AI한테 "안드로이드 2.3은 싱글코어를 지원하는 OS이지만 현재 백포팅된 진저브레드는 스냅드래곤 410 쿼드코어가 작동하는지" 부분을 물어보니 이것도 자세하게 분석해줬다.
커널은 갤럭시 J5 2015 롤리팝 커널을 그대로 사용하여 쿼드 코어가 작동하고 있었다. CPU0~3이 모두 온라인이고, 네 코어 모두 실행 통계가 쌓여 있었다.
다만 generic Gingerbread 빌드에는 Dalvik의 SMP(Symmetric Multi-Processing) 설정이 꺼져 있었다. AI는 Dalvik SMP 설정도 적용해줬다.
더 나아가 4코어 동시 실행 검사도 AI가 진행했다. 각 스레드를 CPU0~3에 고정했을 때, 벽시계 약 2초 동안 합계 약 8초의 CPU 시간을 사용했다. 네 코어가 실제로 병렬 실행된다는 증거였다.
아직 WiFi, Bluetooth, 카메라, 마이크, NFC, MTP 등은 구현되지 않았지만 현재 AI 성능이라면 충분히 구현 가능할 것으로 보인다. 조만간 작동되지 않는 부분을 개선하여 최신 근황을 블로그에 포스팅 해보려고 한다.
이번 작업을 진행하면서 AI가 소프트웨어 뿐만 아니라 하드웨어를 정밀하게 제어한다는 것에 놀라움을 금치 못했다.
현재 AI 발전 속도가 지속되면 우리에게 앞으로 어떤 모습으로 다가올지 기대되기도 하지만 한편으로는 우리에게 어떤 잠재적 영향을 미칠지 우려되는 부분도 있다.
향후 AI가 좋은 영향을 미치길 바라며 오늘 포스팅은 여기서 끝.
