레이블이 bootstrap인 게시물을 표시합니다. 모든 게시물 표시
레이블이 bootstrap인 게시물을 표시합니다. 모든 게시물 표시

2008년 4월 28일 월요일

REDBOOT (ver. smdk2410)

 
<< REDBOOT 소스 분석 >>



시스템이 시작되는 곳

arm.ld 소스보기





exception handler 중 reset_vector

vector.S 소스보기





platform마다의 다른 설정(arm9/smdk2410에 맞게 설정)
hardware에 dependent하다.

Hal_platform_setup.h 소스보기





memory management unit 초기화 및 TTB, virtual memory 설정

Smdk2410_misc.c 소스보기

2008년 1월 17일 목요일

시스템 초기화 루틴


시스템 초기화 루틴이란,
시스템에 power on 한 후 커널의 main 코드를 실행시키기 직전까지 수행시키는 일을 말한다. 즉, 커널에 주도권을 넘겨주기 전에 커널을 시스템상에 올리기 위하여 하는 일을 뜻한다.

power on 또는 reset시에 최초로 수행되는 부분이며, 메모리 0x0번지 부터 읽혀진다. 보통은 bank0의 flash memory에 위치한다.


초기화 루틴은 몇가지 단계를 거쳐 이루어지는데 다음과 같다.

Exception Vector Init → Disable Watch Dog Timer → Disable Interrupt → Clock Configuration → Memory Bank Init → Stack Init → Setup Exception Handler → Init Data Area → Jump to Main

즉, 초기화 단계는 Exception Vector를 설정하고 Exception Handler를 작성하고 메모리 시스템과 stack pointer를 초기화 하는 과정을 거치며 마지막에 C코드로 진입하게 된다.



2007년 11월 2일 금요일

bootloader란

bootloader는 다른말로 bootstrap이라고 하는데 이 말의 어원은 boot(장화) + strap(끈)에서 비롯되었다.
장화의 끈을 묶고 일어서려는 사람이라는 설도 있고, 장화끈을 묶어주는 사람이라는 설도 있는데 아무튼 출발하기 직전의 준비작업이라는 의미가 되는 것 같다.

컴퓨터에서 bootloader는 OS의 최소부분을 메모리로 올려 프로세서가 이를 실행할 수 있게 해주는 일을 하는 녀석이다.
컴퓨터에 전원이 들어오면 시스템을 정상적으로 작동시킬 수 있도록 소프트웨어 및 하드웨어를 초기화 시키고 (Memory setting, CPU clock setting GPIO setting, Serial setting MAC address, Ethernet port setting 등) 커널을 부팅시키는 일을 한다.
하드웨어에 dependent하게 짜여져 있기 때문에 어셈코드가 많으며 flash메모리에 저장되기 때문에 크기가 매우 작다.

부트로더는 메모리로 운영체제를 읽어들이는 역할을 한다.
전원이 들어오면 가장 먼저 수행되어야 하기 때문에 항상 ROM같은 비휘발성 메모리에 보관되어 있다.
부트로더의 가장 큰 역할은 시스템의 초기화 이다.
CPU내의 MMU와 캐시를 활성화시키고 RT클럭과 하드웨어 등을 초기화 시킨다.


그렇기 때문에 bootloader에 대해서 공부하기 위해서는 clock 및 메모리 장치, flash를 잘 알아야하고, C와 assembler를 다룰 줄 알아야 한다.


bootloader의 종류는 매우 많은데 가장 많이 알려진 것들은 다음과 같다.

GRUB: Grand Unified Bootloader GNU 프로젝트 부트로더
LILO: linux loader x86기반의 리눅스
redboot: 레드햇에서 개발된 부트로더, eCos기반
U-boot: universal Bootloader PPCBoot와 ARMBoot를 타깃으로 개발(두개를 합친 것), 환경설정이 쉽다는 장점이 있다.
EZBoot: EZ-X5보드를 위하여 개발된 것으로 부트로더의 장점을 취합
BLOB: arm프로세서 기반의 하드웨어를 위해 개발. 아사벳보드 등
PMON: PROM Moniter MIPSqhem를 지원하기 위해 개발