본문 바로가기
3. 개발 관련/임베디드 :: 괴발개발주절주절이야기보따리

2. 임베디드 리눅스 시작은 Bootloader!!!말고 구조 파악부터!

by kyuho.choi 2011. 9. 2.
728x90
반응형
언제나 모든 이야기의 이어짐이 그렇듯,

다음이야기의 시작은 언제나 앞에 것 우려먹기 입니다. :)

=============================
          Root Filesystem
=============================
       Operating System
=============================
             Bootloader
=============================

이전에 저런 구조로 임베디드 리눅스를 표현했슴미다.

그 중 밑에서 부터 위로 올라가보도록 할 겁미다. 
bootloader, OS, Root FS  에 대해서 간략히 떠들어 대긴 했슴미다만,
얘들이 어떤일을 하는지 세줄요약 정도로 보도록 하겠습니다. 희희

- Bootloader
 1) bootloader 는 주로 1 - 3 단계의 스텝으로 구성되며 이에 맞게 동작함미다.

=============================
                   BL2
=============================
                   BL1
============================= 
                   BL0
=============================  

위에서 BL0와 BL1은 주로 Chip Vendor 에서 제작 및 릴리즈 하는 코드 영역입니다.
칩벤더라 하면 대표적으로 Qualcomm 이나, TI, Samsung System SLI, nVidia, Freescale ... ...등이 됩지요.
칩벤더에서는 ARM이나 특정 IP 업체에서 설계한 CPU (또는 SoC) 블럭을 참고하여 편의상 CPU라 부르는 놈들을
만들어서 찍어가지고 팔고 계심미다. 1GHz  라거나 듀얼코어라거나 쿼드코어라거나 하는 그 칩 들이 동작하기 위한
기본 BL영역이라고 볼 수 있습지요. 희희

그래도 대충 어떤건지는 보고 갑니다. :)

BL0 : 보통 CPU 내부에는 내장되어 있는 ROM 영역과 RAM 영역이 존재합니다.
        이 녀석들을 CPU Internal에 있는 ROM과 RAM 이라해서 iROM, iRAM이라고들 하지요.
        PC나 휴대폰이나 네비게이션이나 타블렛이나 암튼간에 시스템은 전원이 인가되면,
        가장 먼저 이 iROM 에 있는 코드를 읽어 들여서 시스템 부팅을 수행하려고 아둥바둥 애를 씀미다.
        그 때 쓰이는 코드와 코드가 수행될 공간인 메모리 영역이 iROM과 iRAM 임미다.

그런데?) 부팅이라는 것은 어떤 모드로 부팅할 것이냐가 중요해짐미다.
             이 것을 OM(Operation Mode)라고 하는데, OM은 주로 DIP Switch 형태로 구성되는데,
             PC환경을 예로 들자면 점퍼 셋팅이라고 보면 되겠네유. 
             BL0는 이 OM 을 체크해서!! 아~ 내가 어떻게 부팅해야되는구나!! 를 판단하고 동작함미다.

BL1 : 위 BL0는 그러니까 부팅을 하고 싶은데 iROM 자체의 사이즈가 작은 관계로
        전체 시스템 동작이나 제어를 스스로 못함미다. 그래서 BL1 이라고 하는 요녀석을 실행시켜 줌미다.
        BL1은 주로 4KBytes ~ 16KBytes 의 작은 사이즈로 구성됨미다.
        요녀석은 존재하는 경우도 있고 없는 경우도 있는데, 기본 HW dependency 체크와 같은 
        애매모호한 일을 하는 녀석이라고 보면 됨미다. 우선은 넘어감미다. 
     
        어찌되건간에 BL1은 부트 스토리지(nand 나 sd카드)에 저장된 BL2 를 읽어서 메모리로 로딩&실행시켜줌미다.

BL2 : 요녀석이 흔히들 이야기하는 부트로더!! 부트 프로그램!! 부트 소프트웨어!! 가 되심미다.
         일반 리눅스 PC 환경이라면, GRUB 이나 LILO 와 같은 녀석들이 대표적이고,
         ARM architecture 환경이라면 PPCboot 나 ARMboot, U-boot 같은 녀석들이 대표적입니다.
         저는 주로 u-boot 를 사용합지요.
         (그러므로 앞으로 부트로더는 BL2를 다룰 것이고, BL2는 u-boot 를 다룰 것임미다요)
         
         u-boot 이 하는 일은 1. CPU를 초기화하고, 2. Memory 와 같이 매우매우 중요한 HW 들을 초기화
         합니다. 여기서 초기화란? 우리가 CPU 가 어떤건지를 볼때 몇GHz로 동작함미다!! 라고 이야기하듯
         이 CPU를 몇 MHz나, 몇 GHz로 동작하도록 설정하고, Memory 의 Access timing(흔히 램타이밍이라고
         이야기함미다) 등을 설정하여 시스템이 구동되도록 만들어줍니다.

         그럼 왜 u-boot 를 쓰느냐?하면,
         저희가 연애나 결혼을 할 때에도 궁합이란 것을 따지듯이(저는 궁합도 안보고 싶지만 그래도 안생기네유....),
         u-boot 는 Linux 와 궁합이 잘 맞습미다...Linux 또는 UNIX 계열 운영체제를 비교적 잘 지원하고 있는
         부트로더가 u-boot 임미다. 매우매우 좋은 부트로더 이지만 한 가지 불편한 점은 있슴미다...나중에 봅지요. 

         결과적으로 하는 일은 부트 스토리지에 있는 OS 읽어와 메모리에 로딩하여 동작시켜주는 역할을 하지요.

         나중에 기회를 만들어 소스분석을 간단히 해보도록 할 검미다. :)     

그래서 오늘의 이야기는 여기서 끝입니다.
아이고 신나라!



          

 
728x90
반응형

댓글