나빌로스 하면서 링커스크립트를 좀 봐야할거같아서 찾아보니까 이 자료가 적당해보인다.
http://korea.gnu.org/manual/release/ld/ld-mahajjh/ld_3.html
Using LD, the GNU linker - Linker Scripts
Every link is controlled by a linker script. This script is written in the linker command language. 모든 링크 과정은 링커 스크립트가 조정한다. 이 스크립트는 링커 명령 언어로 쓰여진다. The main purpose of the linker script
korea.gnu.org
링커
- 여러 오브젝트 파일을 합쳐서 실행 파일로 만들며, 각 오브젝트 파일은 섹션들을 갖고 있음.
SECTION 명령어 개요
- 링커 스크립트의 유일한 명령어로 코드, 초기화된 데이터, 초기화되지 않은 데이터가 있으면 .text, .data, .bss 섹션이 됨
링커 스크립트 예시
- 코드가 0x10000에 로드되고, 데이터는 0x800 0000에서 시작하는 경우'
- 첫째 줄에선 위치 카운터 '.'의 값을 0x1 0000로 설정.(처음에는 0이며, 설정안할시 현재 값)
- 둘째 줄에선 출력섹션으로 .text 정의하면서, ':' 뒤에 있는 *(.text)는 모든 입력 파일의 .text 섹션을 나타냄.
+ 출력 섹션 '.text'를 정의 할 때, 위치 카운터가 '0x1 0000'이므로 출력(실행) 파일의 .text 섹션 주소를 '0x1 0000'이 됨.
- 셋째 줄에선 위치 카운터 값을 '0x800 0000'로 설정
- 나머지 줄에선 .data, .bss 섹션 정의.
+ 출력 섹션 .data의 주소는 0x800 0000으로 설정
+ .bss의 주소는 .data 섹션의 바로 뒤에 위치
SECTIONS { . = 0x10000; .text : { *(.text) } . = 0x8000000; .data : { *(.data) } .bss : { *(.data) } } |
SECTIONS 명령어
- 입력 섹션의 내용을 어떻게 출력 섹션에 매핑할지. 출력 섹션의 메모리 상 위치를 어떻게 할지 정의
- sections-command whdfb : entry 명령어, 심볼 입력, 출력 섹션 설명
SECTIONS { sections-command sections-command ... } |
출력 섹션 형태
section [address] [(type)] : [AT(lma)] { output-section-command output-section-command ... } |
'컴퓨터과학 > 임베디드' 카테고리의 다른 글
아두이노회로만들기 - 4. 태양광 충전, 블링크 회로 (0) | 2022.08.24 |
---|---|
조금씩 임베디드 - 10. 어셈블리어 (0) | 2022.08.17 |
조금씩 임베디드 - 8. ARM 어셈블리어 (0) | 2022.08.17 |
조금씩 임베디드 - 7. C언어, 어셈블리어 최적화 기법 (0) | 2022.08.17 |
조금씩 임베디드 - 6. 임베디드 시스템 개발과 부트로더 (0) | 2022.06.22 |