인프런 커뮤니티 질문&답변

규철님의 프로필 이미지
규철

작성한 질문수

ARM Cortex-M 프로세서 프로그래밍

부트코드와 부트로더의 차이점

해결된 질문

작성

·

977

1

안녕하세요 이 강의를 정말 유용하게 듣고 있는 학생입니다!

이 강의 소개란에 보면 부트코드와 부트로더는 다르다는 식으로 적혀있던데 부트코드와 부트로더의 차이점이 무엇인지 궁금합니다!

제가 알기론 부트코드는 main sp를 sp 레지스터에 저장하고 reset handler를 통해 .bss영역을 0으로 초기화 후 main으로 분기로 알고 있는데 부트로더는 어떤 개념인지 잘 모르겠습니다.

답변 1

0

홍영기님의 프로필 이미지
홍영기
지식공유자

안녕하세요. 규철님!

부트로더부트코드는 시스템 부팅 과정에서 중요한 역할을 합니다. 부트코드는 특정 하드웨어에서 실행되기 위한 초기 코드로, 전원이 켜지면 CPU가 먼저 실행하는 코드입니다. 반면 부트로더는 운영체제나 애플리케이션을 메모리에 로드하는 역할을 해주는 소프트웨어를 말합니다.

더 자세한 설명이 필요하면 계속 읽어주세요

부트 코드(Boot code)는 임베디드 시스템이 시작될 때, 즉 전원이 켜질 때 실행되는 메인 프로그램의 일부로써 일련의 명령어들을 말합니다.

초기화 코드(또는 부트 코드)의 실행에 의해 프로세서는 리셋 상태에서 메인 프로그램을 실행할 수 있는 상태가 되지요. 일반적으로 이 과정속에서 메모리 컨트롤러와 프로세서 캐시를 구성하고 클럭 시스템을 포함한 필수 하드웨어 장치들이 초기화됩니다. 간단히 요약하면, 부트 코드는 컴퓨터 시스템이 시작될 때 실행되는 코드로, 시스템을 정상적으로 작동시키는데 필요한 초기화 작업을 수행합니다.

부트로더는 컴퓨터 부팅 프로세스에서 중요한 역할을 하는 컴퓨터 프로그램입니다. 컴퓨터가 전원을 켜거나 재부팅 할 때 실행되며, 운영 체제를 메모리에 로드하고 실행하는 기능을 합니다. 예를 들어, Microsoft Windows는 NTLDR 또는 BOOTMGR 같은 자체 부트로더를 사용하죠. 리눅스는 GRUB, LILO, Syslinux 등 다양한 부트로더를 사용하고 있고요. 임베디드 세계에서는 u-boot 가 가장 유명합니다. 부트로더들은 모두 공통적으로 하드웨어를 초기화하고 커널을 메모리로 로드하는 역할을 합니다.

규철님의 프로필 이미지
규철
질문자

답변 감사합니다. 덕분에 많은 걸 알게 되었습니다!

그렇다면 reset ISR과 부트코드는 같은 코드라고 이해해도 되는 것인가요??

아니면 벡터 테이블과 각 exception의 handler들을 모두 포함한 코드가 부트코드와 같은 것인지 헷갈립니다ㅠㅠ

홍영기님의 프로필 이미지
홍영기
지식공유자

보통 어셈블리 언어로 작성되는 부트스타트업 코드 뿐만아니라 main 함수에서 진행되는 하드웨어 초기화까지를 부팅 과정으로 볼 수 있습니다.

그리고, 벡터 테이블은 당연히 부트코드의 일부가 맞습니다.

한편, 익셉션 핸들러는 부트코드의 일부로 인정될 수도 있고, 아닐 수도 있습니다.

펌웨어 소프트웨어의 경우에는 인터럽트와 익셉션 핸들러는 초기 부팅 과정에서 부트코드의 일부로 포함될 수 있지만, 임베디드 리눅스와 같은 운영체제 환경의 소프트웨어에서는 인터럽트와 익셉션 핸들러가 운영체제의 일부로 인정되고 운영체제가 그것을 관리합니다. 그래서 그렇습니다.

규철님의 프로필 이미지
규철

작성한 질문수

질문하기