|
|
Kernel (zImage / Image / Image.gz-dtb)
Device Tree (DTB/DTBO)
Ramdisk (init + rootfs 초기 환경)
이 3개가 합쳐져서 → boot.img 형태로 패키징됨
즉, 커널만 있어도 부팅 구조가 완성되지 않습니다.
2) 일반적인 포팅/빌드 흐름(1) 소스 받기
Linux kernel (구글/제조사 소스)
디바이스 트리
경우에 따라 vendor kernel
(2) 크로스 컴파일
PC에서:
export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-android- make defconfig make -j8
결과:
Image / zImage / Image.gz-dtb 생성
(3) boot.img 생성 (중요)
여기서 끝이 아니라:
mkbootimg
로:
kernel
ramdisk
dtb
를 합쳐서 boot.img 생성
3) 전송(플래싱) 방법
장치에 넣는 방법은 보통 3가지입니다:
1. fastboot (가장 일반적)fastboot flash boot boot.img fastboot reboot
2. recovery / custom recovery (TWRP 등)
zip 형태로 패키징해서 설치
3. 제조사 툴
삼성: Odin
MTK: SP Flash Tool
4) 핵심 포인트 (중요)
질문에서 핵심 오해 포인트는 이겁니다:
❌ “커널만 전송하면 된다”
→ 대부분 부팅 안 됨
이유:
init (ramdisk)가 없음
dtb 없으면 하드웨어 인식 불가
bootloader가 boot.img 구조를 요구함
5) 현실적인 결론
안드로이드 커널 포팅은 이렇게 이해하면 정확합니다:
“커널을 만든다” = 실제로는
boot.img 전체를 구성해서 플래시하는 작업
원하면 다음 단계도 이어서 설명해 드릴게요:
boot.img 구조 완전 해부
mkbootimg 파라미터 의미
DTB / DTBO 차이
“부팅은 되는데 화면이 안 뜨는 경우” 원인 분석
어디까지 진행 중인지 알려주면 거기에 맞춰서 이어가겠습니다.