부트로더 제작 4편. blob 의 동작원리 - 2009/02/10 23:09

기능적으로 분류한다면 BLOB는 크게 3가지의 역할을 수행한다고 보면 될것같다.

첫째, 부트와 사용자 인터페이스이다. 부트로더는 커널이 올라가 있지 않은 프로그램인 관계로 일종의 펌웨어라 볼 수 있으며, 따라서 자체적으로 부트하며 이에 필요한 기초적인 하드웨어 장치(타이머, UART)에 대한 초기화를 하며 관련 드라이버를 가지고 있다.

또한 사용자 키 입력을 받아 인터프리트(해석)후 특정 기능을 수행해 주며 필요한 경우 해당 결과를 화면(CONSOLE)으로 알려 줄 수 있다.

둘째, 응용 프로그램(소프트웨어) 예를들면 리눅스 커널 같은 프로그램을 UART 혹은 TFTP 등의 인터페이스를 통해 보드 내의 SDRAM 혹은 FLASH 메모리에  다운로드 할 수 있다.

셋째, 다운로드된 프로그램으로 제어권을 옮기는 즉, 실행 할 수 있는 기능을 가지고 있다.


BLOB의 메인코드인 'main.c' 의 일부를 다음과 같이 발췌한다.



이 메인코드의 분석은 BLOB의 기능들을 모두 조망하여 보기에 좋은 방법이 된다.


startup.s 이후의 첫번째 실행 코드인 main() 은 다음과 같은 프로시져로 구성되어 있다.


라인번호[99 - 100] 에 의해 타이머와  UART 장치의 초기화를 수행한다.

라인번호[111 - 112]  플래시메모리에서 커널과 램디스크 이미지를 각각 SDRAM 으로  읽어 적재한다(LOADING...).

라인번호[142 - 150] 10초 동안 사용자 키입력을 대기한다. 키입력이 없을 경우 디폴트로 라인번호[153-156]에 의해 커널이 실행된다.

라인번호[162-194] 루프를 회전하며 사용자 명령을 대기한다.[ BLOB> 프롬프트 대기 ]


현재 BLOB 에서 지원하는 주요 기능[명령]은 main.c 에서 보이는 것이 전부 이다. 따라서 지원 하는 명령들은 boot / clock / download / flash / help / reload / reset /speed /status 이다.

이중 자주 사용되기도 하고 또한 중요한 명령은 reset / boot / download / flash 정도 일 것이다.


NEXT. . . 다음 시간에는 blob의 부트스타트업(start.s)에 대하여 알아 봅니다.


posted by 가일(GUILE)

♡ 포스팅이 유익 하셨다면 E-mail로 가일의 임베디드 스쿨을 구독하세요->

Trackback Address :: http://www.hongikcom.com/trackback/73 관련글 쓰기
Name
Password
Homepage
Secret
< PREV |  1  |  ...  61  |  62  |  63  |  64  |  65  |  66  |  67  |  68  |  69  |  ...  131  |  NEXT >