학부 임베디드 시스템 수업, ARM Cortex-A 기반 보드 부팅 실습
학부 임베디드 시스템 수업에서 ARM Cortex-A 기반 보드에서 Linux가 올라오는 과정을 처음 단계별로 분석했습니다. 부팅 순서는 BootROM → 1차 부트로더 → U-Boot → 커널 → 드라이버로 진행되고, 각 단계가 다음 단계를 메모리에 올리고 제어권을 넘기는 구조라는 걸 배웠습니다. U-Boot에서 환경 변수를 잘못 설정하면 커널 이미지를 로드하는 경로나 디바이스 트리가 맞지 않아 부팅이 멈추는 경험을 했습니다.
JTAG 디버거로 초기 BootROM 단계부터 단계별 레지스터 상태를 추적하면서 어느 시점에 실패했는지를 파악하는 방법도 익혔습니다. 하드웨어 설계와 소프트웨어 부팅 절차가 서로 독립적인 게 아니라 긴밀히 연결되어 있다는 걸 그때 이해했습니다. 이후 저는 SoC 부팅 이슈를 볼 때 어느 단계에서 멈췄는지를 먼저 좁히는 습관이 생겼습니다.
부팅 실패는 보통 경계 단계에서 발생한다는 걸 그 경험에서 배웠습니다.