-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkernel.ld
More file actions
58 lines (46 loc) · 1.89 KB
/
kernel.ld
File metadata and controls
58 lines (46 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* -------------------------------------------------------
* 커널이 사용할 메모리 공간에 대한 명세
* -------------------------------------------------------
*/
/*
* 프로그램이 실행을 시작할 때 가장 먼저 실행할 함수를 boot로 지정합니다.
* CPU가 처음 시작할 때 이 주소로 점프하게 됩니다
*/
ENTRY(boot)
/*
* text : 실행 가능한 코드가 저장된 영역 (함수)
* data : 초기화된 변경 가능한 전역 변수
* rodata : 초기화된 변경 불가능한 전역 변수 (const, 문자열 리터럴)
* bss : 초기화되지 않은 전역 변수
*/
SECTIONS {
/* base address .은 위치 카운터를 가리키는 예약어로, 실제 메모리 위치를 제어합니다. */
. = 0x80200000;
__kernel_base = .;
/* text 영역을 먼저 배치. 텍스트 이름을 wildcard 패턴으로 잡아 위치시킨다. */
.text :{
KEEP(*(.text.boot)); /* 링커가 사용하지 않는 영역을 삭제하는 것을 방지 (KEEP) */
*(.text .text.*); /* 입력 파일 중 .text 혹은 .text.* 란 이름을 가진 것을 현재 위치에 배치시킨다. */
}
/* 배치 후에는 위치 카운터가 자동으로 증가함 */
/* 32bit OS이므로 4byte 정렬 */
.rodata : ALIGN(4) {
*(.rodata .rodata.*)
}
.data : ALIGN(4) {
*(.data .data.*);
}
.bss : ALIGN(4) {
__bss = .; /* __bss 에 현재 메모리 위치(.) 저장 */
*(.bss .bss.* .sbss .sbss.*); /* sbss 는 small bss를 의미 */
__bss_end = .;
}
. = ALIGN(4);
. += 128 * 1024; /* 현재 위치에 128KB 추가 할당 */
__stack_top = .; /* 스택의 최상단 주소를 __stack_top 변수에 저장 */
. = ALIGN(4096);
__free_ram = .;
. += 64 * 1024 * 1024; /* 64MB */
__free_ram_end = .;
}