부트로더

Mokwon Univ 2008. 8. 16. 16:55
 
부트로더의 역할
프로세서와 보드 초기화 : 프로세서마다 필요로 하는 초기화를 수행하고 메모리 컨트롤러의 레지스터를 설정하여 외부 메모리를 접근할 수 있도록 초기화한다. PLL(Phase Locked Loop)을 프로그래밍하여 CPU 클럭을 원하는 속도로 설정하고, UART를 초기화하여 필요한 경우 직렬 포트(serial port)를 통해 메시지를 출력하거나 입력받을 수 있게 한다. 그밖에 프로세서에 연결된 주변 장치의 종류에 따라 다르게 설정해야 하는 레지스터(예를 들어 타이밍이나 버스 폭을 지정하는 레지스터)도 부트로더에서 설정한다.
운영체제을 로드와 실행 : EEPROM이나 플래시 메모리, 때로는 IDE 디스크나 CD-ROM, 네트워크를 통해서 운영체제 이미지를 읽어들여 실행한다. 일단 운영체제로 제어권을 넘긴 후에는 부트로더는 더이상 필요하지 않다. 운영체제를 시스템에 덜 의존적으로 만들기 위해 시스템 정보를 자료구조로 만들어 운영체제에 전달하고, 개발자의 필요에 따라 명령행 인자(command line parameter)를 운영체제에 넘길 수 있게 한다.
개발자 지원 : 개발자가 메모리를 덤프(dump)하거나 특정 메모리나 레지스터를 읽고 쓸 수 있게 하여 개발자가 시스템 상태를 살펴보고 간단한 조작을 할 수 있도록 도와준다. 더 나아가 UART나 네트워크를 통해 새로운 부트로더나 운영체제 이미지를 다운로드하여 플래시 메모리를 업데이트하게 할 수도 있고, 메모리 테스트를 비롯한 여러 가지 테스트 기능을 구현하여 제품을 양산할 때 제품을 테스트하는 일도 할 수 있다.
 
부트로더를 제작하기 위해 알야야 할 것들
전체 하드웨어의 구조와 동작 방법, 개별 구성 요소를 제어하는 방법, 이들이 어떻게 상호작용하는지 정확하게 파악해야 하기 때문에 프로그래밍 기술보다는 오히려 여러 분야의 많은 지식과 다양한 경험이 더 필요한 편이다.
CPU용 이셈블리어와 C 언어를 모두 능숙, C++는 직접 사용할 수 없기 때문에 그다지 필요없다.
어셈블러와 컴파일러, 링커 등의 사용법
make 유틸리티도 자유롭게 사용하는게 도움이 된다.
마이크로프로세서에 탑재된 CPU 코어의 구조에 대해 파악
프로세서에 내장된 구성 요소의 동작 원리, 내부 버스 구조, 보드에 탑재된 주변 장치의 종류와 사용법
프로세서나 보드의 사용자 메뉴얼과 데이터시트(datasheet)
 
ARM 프로세서는 부트롬(bootROM)을 주소 0x00으로 매핑하여 하드웨어 리셋을 하면 부트롬의 코드를 실행하게 한다.
 
부트로더의 구조와 실행 단계
부트로더는 크게 어셈블리어로 작성하여 시스템 동작에 필수적인 저수준의 초기화를 수행하는 단계, 설정한 환경을 바탕으로 C 언어로 작성하는 고수준의 초기화 단계, 운영체제를 로드하여 실행하는 단계로 나눌 수 있다.
첫 번째 단계, 일반적으로 프로세서마다 필요한 초기화와 메모리 초기화, 스택 설정, 캐시 설정, CPU 클럭 설정
두번째 단계, UART를 포함한 주변 장치를 설정
 
부트롬
ROM(Read Only Memory)
PROM(Programmable ROM)
EPROM(Eraseable PROM)
EEPROM(Electrically Eraseable PROM)
플래시 메모리(Flash Memory)
Posted by 용학도리
,