[Linux] 임베디드 리눅스 부팅 순서 + 비글본 블랙(BBB) 부팅 순서

2025. 10. 28. 18:20·Embedded Systems/리눅스

https://www.youtube.com/watch?v=DV5S_ZSdK0s&t=359s

임베디드 리눅스 부팅 순서를 정리한 훌륭한 강의의 내용을 정리해보았다!


1. "대부분의 리눅스  시스템"에서의 부팅 순서

출처: https://www.youtube.com/watch?v=DV5S_ZSdK0s&t=359s

1. SoC ROM Bootloader의 역할

보드에 파워를 넣으면, 제어가 reset vector라는 곳으로 넘어간다. 이 부분은 제조사가 보드에 사전 프로그래밍한 기능이다.

reset vector 로 제어가 넘어간 뒤에는 일반적으로 SoC의 boot ROM 로더가 존재하기 때문에, ROM 부트로더가 executing 을 시작할 것이다.

이제, ROM 부트로더의 할일은 기본적인 하드웨어를 설정하고 boot device에서 First stage bootloader을 찾는 것이다. 이 boot device는 네트워크가 될 수도, 메모리 버스가 될 수도, USB나 SD card가 될 수 도 있다.

ROM 부트로더가 서로다른 장치들을 조회해가며 first-stage bootloader을 찾게되면, ROM 부트로더는 SoC의 내부 메모리로 first-stage bootloader을 로드한다. 그리고 first-stage bootloader로 제어권을 넘긴다.

 

2. First Stage Bootloader의 역할

이제, first-stage bootloader 은 RAM에 올릴 second-stage bootloader을 fetch한 뒤 또 제어권을 second-stage bootloader로 넘길 것이다. 여기서 중요한 점은, '호출한다'가 아닌 '제어권을 넘긴다'라고 표현하는 부분이다. 일반적으로 '제어권을 넘긴다'라고 말하면, running 상태에 있던 이전 프로그램의 존재가 사라진다는 의미이다. 반면에 호출 이라는 것은 호출된 프로그램이 종료하면 다시 이전의 프로그램으로 돌아온다는 의미이다. 그리고 이러한 호출은 부트로더에서 전혀 필요하지 않는 일이다.

 

3. Second Stage Bootloader의 역할

Second-stage bootloader의 주된 역할은 kernel과 device tree를 RAM에 로드하는 것이므로, Kernel의 부트 요소들을 설정하고 Kernel로 제어권을 넘긴다.

 

4. Kernel과 Device Tree의 역할

커널은 여러 HW 요소들을 초기화하고, 부트로더가 넘겨준 부팅 요소들을 참고해 root filesystem을 찾아낸 뒤, root filesystem을 마운트한다. 이것들이 성공적으로 끝난 뒤에는 커널은 루트 파일시스템에서 init process를 찾을 것이다. 이 init process는 유저 공간(user space)에서 PID 0로 처음 실행되는 프로세스이다. 이것이 성공적으로 끝난 뒤, init 프로세스는 자신의 configuration 파일들을 보며 다른 user space 프로세스들을 실행할 것이다.

 

 

2. 비글본 블랙에서의 부팅 순서

2.1. 비글본 블랙 SoC의 기본적인 특징들

우선 비글본 블랙의 CPU인 TI사의 am335x 데이터시트를 보면, 비글본 블랙은 176KB의 ROM과 128KB의 내장 RAM을 가지고 있다는 것을 알 수 있다.

이제 cortex-a8의 메모리 맵을 보면, Boot ROM이 176KB 인 것으로 보아, 비글본 블랙의 ROM은 전체가 Boot ROM 임을 알 수 있다. 

그리고 SoC인 am335x의 부트롬 아키텍처를 보면, 부트롬은 MMC/SD cards 와의 통신과, FAT 파일시스템을 지원한다는 점을 알 수 있다.

또한, 이 SoC는 HS와 GP라는 두가지 부팅 모드를 지원함을 알 수 있다.

2.2. 비글본 블랙의 부팅 순서

그래서, 언급한 특징을 가진 am335를 탑재한 비글본 블랙은 구체적으로 어떤 순서로 부팅이 된다는 말인가?

 

부팅의 가장 첫번째 순서인 ROM Code가 실행하는 것을 살펴보자.

ROM Code는 가장 먼저, 시스템이 start-up 되면 기본적인 initalization을 거친 뒤, WatchDog Timer1을 설정한다. 문서를 보면, 이 WDT1은 ROM Bootloader이 3분 내에 boot device를 찾아 다음 단계로 나아가지 않으면 보드를 리셋하는데 사용된다고 한다.

그 다음에는, Clock과 PLL설정을 통해 system clock을 설정한다.

이렇게 boot device를 찾고 system clock 설정을 마친 뒤에는, ROM Bootloader은 어떻게 다음 단계로 넘어갈 수 있는지 찾게되며 그 순서도는 아래와 같다.

여기서 Memory booting은 SD card를 이용한 부팅을 의미한다. 이 SD 부팅은 어떻게 이뤄질까?

 

MMC/SD 부팅 순서도

위의 순서도를 보면, ROM 부트로더가 여러 부팅 소스(네트워크, USB, SD카드, ...)를 탐색하다가 MMC/SD 카드의 차례가 오면 ROM 부트로더는 MMC/SD 드라이버를 초기화시킨다. 이후 ROM 부트로더는 다음 단계의 부트로더가 raw mode로 MMC/SD 카드에 있는지 혹은 boot file 형태로 있는지를 살펴본다. 이 부분을 더 자세히 살펴보자.

 

raw mode는 부팅 이미지가 main area의 네가지 정해진 위치 중 한 곳에 위치한 모드이다. 

FAT mode는 MMC/SD 카드의 FAT 파티션에 "MLO"라는 특정 이름의 boot file이 있는지 살펴보게 된다.

이 MLO는 어떤 역할을 수행할까?

MLO(First Stage Bootloader)는 U-Boot와 uEnv.txt라는 Second Stage Bootloader을 RAM에 로드한다.

이렇게 굳이 First Stage(MLO) 와 Second Stage(U-Boot) Bootloader가 나뉘는 이유는, ROM Bootloader가 작동할 당시인 기기에 파워를 넣은 직후에는 RAM을 사용하기 위한 메모리 관리자가 실행되고있지 않아 외부 RAM을 사용할 수 없어, 한정된 용량의 내부 SRAM(128KB)만을 활용해야하기 때문에 RAM을 관리할 수 있는 OS의 MMC를 활성화 시킬 수 있는 First Stage Bootloader(MLO)가 필요한 것이다.

 

 

'Embedded Systems > 리눅스' 카테고리의 다른 글

[Linux] BBB Linux boot time 최적화 #0  (0) 2025.11.04
[Linux] U-boot 가 리눅스 커널을 로드하는 구체적인 과정 정리(1)  (0) 2025.10.30
[Linux] 디바이스 드라이버란 무엇일까?  (0) 2025.10.27
[Linux] 리눅스의 프로그래밍 도구 (GCC, make, gdb 유틸리티)  (0) 2025.10.27
[linux] gcc를 이용한 소스 코드 빌드 과정  (0) 2025.10.21
'Embedded Systems/리눅스' 카테고리의 다른 글
  • [Linux] BBB Linux boot time 최적화 #0
  • [Linux] U-boot 가 리눅스 커널을 로드하는 구체적인 과정 정리(1)
  • [Linux] 디바이스 드라이버란 무엇일까?
  • [Linux] 리눅스의 프로그래밍 도구 (GCC, make, gdb 유틸리티)
jh-rrr
jh-rrr
기술의 깊이에 집중하며 성장하길 지향합니다.
  • jh-rrr
    Embedded World
    jh-rrr
  • 전체
    오늘
    어제
    • 분류 전체보기 (64)
      • 소프트웨어 (17)
        • 프로그래밍 (2)
        • C (10)
        • Python (1)
        • 운영체제 (3)
        • 네트워크 (0)
      • Embedded Systems (16)
        • 리눅스 (10)
        • MCU 기본 (2)
        • 임베디드 레시피 (0)
      • Projects (1)
        • Cortex-M3 (1)
        • 재난 구조 로봇 (0)
      • AI (11)
        • Computer Vision (2)
        • Deep Learning (3)
        • cs224n (2)
        • cs231n (2)
      • 취업 준비 (0)
        • 프로젝트 & 자격증 (1)
      • 엔지니어링 뉴스 (3)
      • Paper Reviews (4)
      • Insights (8)
        • Seminar ! (2)
        • 서평 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    일귀
    essential deep learning paper reading
    리눅스
    커널 이미지
    kernel image 란
    stm32f 시리즈를 이용한 arm cortex-m3/m4 구조와 응용
    커널 이미지란
    OS 이미지
    리눅스 오류
    conda: command not found
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
jh-rrr
[Linux] 임베디드 리눅스 부팅 순서 + 비글본 블랙(BBB) 부팅 순서
상단으로

티스토리툴바