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

규철님의 프로필 이미지

작성한 질문수

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

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

해결된 질문

23.10.11 11:14 작성

·

936

1

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

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

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

답변 1

0

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

2023. 10. 11. 19:57

안녕하세요. 규철님!

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

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

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

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

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

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

2023. 10. 12. 16:56

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

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

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

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

2023. 10. 13. 00:01

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

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

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

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

규철님의 프로필 이미지

작성한 질문수

질문하기