임베디드 용어 사전
부팅·빌드

링커 스크립트

어떤 코드와 데이터를 메모리의 어느 영역에 놓을지 지시하는 파일. 임베디드에서는 직접 손대는 일이 잦다.

PC 에서는 신경 쓸 일이 없지만, 임베디드에서는 플래시와 SRAM 이 나뉘어 있어 필수다.

MEMORY {
  FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
  RAM  (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
}
SECTIONS {
  .text   : { *(.text*) }   > FLASH        코드·상수
  .data   : { *(.data*) }   > RAM AT> FLASH  초기값 있는 전역
  .bss    : { *(.bss*) }    > RAM          초기값 없는 전역
}

AT> 가 핵심

.data실행 주소는 RAM, 저장 주소는 플래시다. 이 둘이 다르다는 사실이 부팅 시 복사가 필요한 이유이고, 링커가 만들어 주는 심볼로 그 범위를 알아낸다.

실무에서 손대는 경우

  • 부트로더와 애플리케이션의 영역을 나눌 때
  • 특정 버퍼를 특정 주소·특정 RAM 블록에 고정할 때(DMA 전용 영역 등)
  • 스택·힙 크기를 조정할 때
  • 리셋 후에도 값을 남기는 noinit 영역을 둘 때(폴트 기록 보존)

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 링커 스크립트와 빌드 — 무엇이 어디에 놓이는가