Brise
ld(링커 스크립트, Linker Script) 공부 내용 본문
/* 구조
링커는 여러 object file들을 하나로 합치는 것
object file은 section과 symbol로 구성됨
section은 loadable, allocatable 할 수 있고
symbol은 defined or undefined 될 수 있다.
*/
/* section
출력섹션은 두 주소를 가진다
1. VMA(virtual memory address) : 출력파일이 실행될 때 섹션이 위치하는 주소
2. LMA(load memory address) : 출력파일을 로드할때 위치하는 주소
VMA != LMA인 경우 자료를 ROM에서 읽어서 RAM에 복사하는 경우
LMA = ROM
VMA = RAM
*/
/* symbol
symbol = expression ;
symbol += expression ;
symbol -= expression ;
symbol *= expression ;
symbol /= expression ;
symbol <<= expression ;
symbol >>= expression ;
symbol &= expression ;
symbol |= expression ;
*/
/* 엔트리
프로그램에서 처음으로 실행되는 명령이 진입점이다. ENTRY 명령어로 진입점을 설정한다. 아규먼트는 심볼이름이다.
엔트리 설정 순서는 아래 중 첫번째가 성공하는 경우 결정된다.
> `-e' entry 옵션
> 링커 스크립트의 ENTRY(symbol) 명령어
> start 심볼이 정의되있다면 심볼 값
> `.text' 섹션이 있다면 첫 바이트 주소
> 주소 0
*/
ENTRY(symbol)
/* 메모리 명령
MEMORY 명령어는 플래폼에서 메모리 블록의 위치와 크기를 알려준다.
그래서 링커가 사용거나 피해야하는 메모리 영역을 지정할 수 있다.
또 섹션을 특정 메모리 영역에 할당할 수 있다.
링커는 메모리 영역에 기반하여 섹션 주소를 정하고 영역이 다 차면 경고를 한다.
링커는 주어진 크기에 적합하게 섹션을 재배치하지 못한다.*/
MEMORY
{
name [(attr)] : ORIGIN = origin, LENGTH = len
DTCM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20020000, LENGTH = 368K
RAM2 (xrw) : ORIGIN = 0x2007C000, LENGTH = 16K
ITCM (rx) : ORIGIN = 0x00000000, LENGTH = 16K
FLASH (rx) : ORIGIN = 0x00200000, LENGTH = 2048K
}
/* attr
`R' : Read-only section
`W' : Read/write section
`X' : Executable section
`A' : Allocatable section
`I' : Initialized section
`L' : Same as `I'
`!' : Invert the sense of any of the preceding attributes
*/
/* 출력 파일 */
/* SECTIONS 명령 구조 */
SECTIONS
{
sections-command -->
section [address] [(type)] : [AT(lma)]
{
output-section-command
output-section-command
...
} [>region] [AT>lma_region] [:phdr :phdr ...] [=fillexp]
}
/* sections-command 종류
> ENTRY 명령어 (Setting the entry point를 참고)
> 심볼 대입 (Assigning Values to Symbols 참고)
> 출력 섹션 기술
> 오버레이 기술
(type)
NOLOAD : 이 섹션을 로드가능하지 않게 한다. 그래서 프로그램이 실행될 때 메모리로 읽어들이지 않는다.
DSECT
COPY
INFO
OVERLAY
: 이 타입은 호환성을 위해 지원되며 거의 사용되지 않는다. 이들은 모두 섹션을 할당하지 않게 하여, 프로그램 실행 시 섹션에 대한 메모리가 할당되지 않게 한다.
AT 키워드
--> LMA를 변경한다.
*/
/* output-section-command 종류
> 심볼 할당 (Assigning Values to Symbols 참조)
> 입력 섹션 기술 (Input section description 참조)
> 직접 포함할 자료값 (Output section data 참조)
> 특별한 출력 섹션 키워드 (Output section keywords 참조)
*/
'프로그램' 카테고리의 다른 글
마크다운 간단 사용법 (0) | 2022.06.19 |
---|---|
John the ripper; 암호 해제하기 (0) | 2022.05.05 |
VS code에서 Anaconda Python 연동 시 오류 발생할 때 해결 방법 (0) | 2020.09.22 |
정규 표현식(Regular expression) 쉽게 이해하기 (0) | 2017.06.16 |
OPC UA Reference implementation (0) | 2017.04.09 |
파일의 체크섬(checksum) 확인하기 (0) | 2016.12.17 |
자바 cpu 사용률 측정하기 (0) | 2016.08.22 |