-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkernel.lds
69 lines (60 loc) · 1.24 KB
/
kernel.lds
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
59
60
61
62
63
64
65
66
67
68
69
OUTPUT_FORMAT(elf64-x86-64)
ENTRY(start)
PHDRS
{
boot PT_LOAD;
ap_boot PT_LOAD;
text PT_LOAD;
data PT_LOAD;
}
SECTIONS
{
/*
* По адресу VMA = LMA = 0x100000 расположен загрузочный код
*/
. = 0x100000;
.boot :
{
*boot.o(.text)
} : boot
/*
* По адресу VMA = 0x8000, LMA = ap_bootcode расположен код инициализации AP
*/
ap_bootcode = .;
.ap_boot 0x8000:
AT(ap_bootcode)
{
*ap_init.o(.ap_text)
} : ap_boot
/*
* Корректируем испорченный счетчик LMA
*/
. = ap_bootcode + SIZEOF(.ap_boot);
ap_bootcode_end = .;
/*
* Ядро расположено в последнем гигабайте памяти, для него
* VMA = LMA + 0xFFFFFFFFC0000000
*/
. += 0xFFFFFFFFC0000000;
kernel_begin = .;
.text ALIGN(4096) :
AT(ADDR(.text) - 0xFFFFFFFFC0000000)
{
*(EXCLUDE_FILE(*boot.o).text)
*(EXCLUDE_FILE(*ap_init.o).text)
*(.text)
} : text
.data ALIGN(4096) :
AT(ADDR(.data) - 0xFFFFFFFFC0000000)
{
*(.data)
*(.rodata*)
} : data
.bss ALIGN(4096) :
AT(ADDR(.bss) - 0xFFFFFFFFC0000000)
{
*(COMMON*)
*(.bss*)
} : data
kernel_end = .;
}