조금 늦은 감은 있지만, BLOB 라는 부트로더에 대해서 간략히(?) 분석해 볼 것이다. 여기서는 SA-1100 을 기준으로 설명한다.
초기화
함수 이름 | 설명 |
Start-ld-script | 각 섹션의 정의, 엔트리 포인트 설정(_Start) |
_Start → reset | 모든 인터럽트 마스킹, 클럭설정(속도) |
_Start → memsetup | 초기 메모리 설정(타이밍, 시그널 설정등) |
_Start → ledinit | LED 초기화(GPIO) |
_Start → sleepmode | 슬립모드라면 깨어나서 연산을 계속 수행한다 |
_Start → normal_boot | I-cache 를 Enable 하고, 1Mbyte R/W 테스트 |
_Start → copy_loop | 처음 1024KB 를 SKIP 하고 이후에 blob 를 메모리에 복사한다. 복사가 끝나면 PC 를 blob 가 시작되는 곳으로 옮겨서 실행이 계속되도록 한다 |
trampoline.s → b main | C 프로그램 시작, 이후 serial 초기화 → timer 동작 → 시스템 메모리맵을 구한 후 blob 의 상태 초기화 |
커널과 RAM disk 를 Flash 로 읽어서 RAM 으로 가져다두게 되고 사용자의 입력을 기다림