기록
[GPT가 알려주는] AOSP랑 Soong 본문
좋다.
AOSP 전체 구조 + 부팅 과정 + vendor/telechips + 커널 + 파티션 + 이미지 빌드 흐름까지
초딩도 이해하는 레벨로 다시 싹 다 풀어서 알려줄게.
너 이제 진짜 Android IVI 개발자 맞음.
🧱 1. AOSP는 “안드로이드 레고 창고”
너가 쓰는
~/PROJECTS/MHC_TCC8070/android
== 안드로이드 레고 공장 전체.
안에는 다음이 있음:
- 레고 조각 (소스코드)
- 조각 설명서 → Android.bp
- 특수 레고 → Soong/Ninja 빌드시 들어가는 모듈
- 기계 장비 → 빌드 도구들
🤖 2. Soong = 조립 설계도 만드는 로봇
Android.bp들을 읽고
"이 부품은 먼저 만들고, 이건 나중에 만들고…"
전체 조립 계획(blueprint)을 만듦.
📘 Android.bp = 레고 조각 설명서
🛠 Soong = 설명서를 읽고 전체 계획을 만드는 로봇
⚡ 3. Ninja = 실제 조립하는 초고속 공장 기계
Soong이 만든 계획서를 받아서
진짜로 OS를 빌드하는 애.
Ninja가 돌 때:
- system.img
- vendor.img
- boot.img
- odm.img
- product.img
같은 실제 “완성품”이 만들어짐.
🧩 4. 커널(Linux Kernel)은 레고 공장 바닥
안드로이드는 리눅스 커널 위에 돌아감.
커널은 다음을 담당함:
- CPU 스케줄링
- 메모리 관리
- 파일 시스템
- 드라이버 (UART, I2C, SPI, USB, GPU, CAN 등)
- 프로세스 실행
📌 커널은 레고 공장의 바닥/기초임.
Android Framework/System은 그 위에서 놀고 있음.
🧰 5. Bootloader는 “레고 공장 기계 전원 켜는 친구”
Android는 부팅할 때 이렇게 감:
- Boot ROM (칩 안에 하드코딩)
- 1st Stage Bootloader (BL1)
- 2nd Stage Bootloader (BL2/U-Boot or LK)
- Vendor Boot
- Kernel 실행
- init 실행
- System 부팅
Telechips는 BL1/BL2/U-boot, Hypervisor 등 구조가 특이함.
🔌 Bootloader = 공장 전원 켜고, 커널을 불러오는 애
🗂 6. vendor/telechips는 “Telechips 회사에서 만든 특별 레고 조각”
Google AOSP는 순정 레고임.
하지만 너는 Telechips SoC(TCC8070)를 사용하기 때문에
추가로 필요한 조각들(touch driver, GPU hal, vehicle service 등)이 있음.
그래서:
- SoC 별 HAL
- Display service
- Audio hal
- CAN service
- Boot-control
- Subcore update
- Hypervisor configs
- 패치 파일들
이런 게 전부 vendor/telechips 아래에 있음.
📌 vendor = 있는 그대로 회사가 넣은 커스텀 레고 조각 저장소
🪛 7. device/telechips/* 는 “조립 안내서”
device/* 는 SoC/보드 구체 설정이 들어 있음.
- 파티션 구조
- init.rc 파일
- 부팅 시 서비스 실행
- Feature enable
- 파일 위치 매핑
- SELinux policy
📌 device/telechips/ = 해당 보드 전용 조립 설명서*
🧱 8. 파티션 = 레고 창고를 여러 칸으로 나눈 것
Android 파티션은 이렇게 나뉩니다:
- boot → 커널 + ramdisk
- vendor_boot → 커널 관련 추가 파일
- dtbo → 장치 트리
- system → Android framework
- vendor → Telechips HAL
- product → OEM 앱
- odm → 파트너(HMG, OEM) ai 가능한 부분
- super → system/vendor/product 통합 파티션
📌 파티션 = 레고 박스를 종류별로 분리한 것
🛠️ 9. Android 부팅 순서(초딩버전)
① Bootloader
“얘들아 커널 실행할 준비해!”
② Kernel
“오케이, 안드로이드 공장 바닥 설치!”
③ init (PID 1)
“자~ 공장 기계들 전부 켜자”
④ Zygote 시작
“앱 만드는 공장 준비!”
⑤ SystemServer
“Wi-Fi, Bluetooth, Audio, Display, Window 다 준비!”
⑥ Launcher 실행
“짜잔! 화면 켜짐!”
🌈 10. vendor/telechips/aosp-patch 는 “레고 조각을 수정하는 패치 모음집”
Telechips가 Android 오픈소스를 그대로 쓰지 않고
수정해야 하는 부분이 있을 때
- Bootloader message 크기 변경
- Hypervisor integration
- partition layout fix
- HAL bug fix
이런 걸 patch 파일로 제공함.
📌 그래서 문제 있으면 보통 여기서 충돌이 남.
🚀 11. 전체 AOSP 빌드가 어떻게 도는지 (초딩버전 완성)
- envsetup.sh / lunch
→ 로봇(Soong)을 깨운다 - Soong
→ 전체 Android.bp 읽고 조립 계획 작성 - Ninja
→ 계획대로 system/vendor/product 이미지 조립 - Out 디렉터리
→ 완성된 레고 세트(system.img 등)가 생성됨 - FWDN or fastboot flash
→ 기기에 설치됨 - 기기 부팅
→ Bootloader → Kernel → Android Framework → Launcher
완.벽.
🔍 너가 지금 겪은 에러 설명도 초딩 버전으로…
문제 상황
bootloader_message_ab라는 레고 조각(X 부품)의 크기가
구글 기본 AOSP에서는 4096바이트인데
Telechips 버전에서는 8192바이트가 필요함.
근데 어떤 박스에는 4096이라고
어떤 박스에는 8192라고 적혀 있어서
로봇(Soong)이 조립하다가:
“뭐야?? 크기 안 맞아!! 멈춰!!!”
하고 빌드를 중단한 것.
왜 에러 메시지에 6144가 나왔냐?
4096 → 구글 AOSP 원래 크기
8192 → Telechips 패치 적용 후 필요한 크기
하지만 너의 코드에서는 구조체가 애매하게 수정되어
실제 크기가 6144가 되어버린 것.
즉,
- Telechips 패치 제대로 안 적용됨
- 반쪽짜리 패치 적용
- struct 안의 배열 길이가 어중간함
- padding 잘못 들어감
- .git/rebase-apply 잔해가 충돌함
이런 이유로 “6144바이트짜리 괴물 조각”이 나온 것.
👍 결론
필요하면 지금 네 local project에서 정확히 어떤 파일에서 struct가 6144가 되었는지 계산도 해줄 수 있음.
네가 원하면:
- bootloader_message_ab 전체 구조 계산
- Telechips 패치와 AOSP 원본 diff
- 어느 부분에서 padding이 발생했는지
- 최종적으로 8192로 일치시키는 정확한 수정본 제공
- patch 파일로 만들어서 바로 git apply 할 수 있게 생성
다 할 수 있음.
원해?
'잡동사니 > GPT가 알려주는' 카테고리의 다른 글
| [GPT가 알려주는] X86 vs Arm64 (0) | 2025.12.04 |
|---|---|
| [GPT가 알려주는] AIDL과 HIDL (0) | 2025.12.04 |
| [GPT가 알려주는] 서버 확인 명령어 (lsb_release -a) (0) | 2025.11.26 |
| [GPT가 알려주는] 리눅스 mount란? (0) | 2025.11.24 |
| [GPT가 알려주는] 디스크와 파티션 (0) | 2025.11.20 |