uCore-Tutorial-Code-2023S/scripts/kernelld.py

70 lines
1.1 KiB
Python

import os
TARGET_DIR = "./user/target/bin/"
if __name__ == '__main__':
f = open("os/kernel_app.ld", mode="w")
apps = os.listdir(TARGET_DIR)
f.write(
'''OUTPUT_ARCH(riscv)
ENTRY(_entry)
BASE_ADDRESS = 0x80200000;
SECTIONS
{
. = BASE_ADDRESS;
skernel = .;
s_text = .;
.text : {
*(.text.entry)
*(.text .text.*)
. = ALIGN(0x1000);
*(trampsec)
. = ALIGN(0x1000);
}
. = ALIGN(4K);
e_text = .;
s_rodata = .;
.rodata : {
*(.rodata .rodata.*)
}
. = ALIGN(4K);
e_rodata = .;
s_data = .;
.data : {
*(.data)
''')
for (idx, _) in enumerate(apps):
f.write(' . = ALIGN(0x1000);\n')
f.write(' *(.data.app{})\n'.format(idx))
f.write(
'''
. = ALIGN(0x1000);
*(.data.*)
*(.sdata .sdata.*)
}
. = ALIGN(4K);
e_data = .;
.bss : {
*(.bss.stack)
s_bss = .;
*(.bss .bss.*)
*(.sbss .sbss.*)
}
. = ALIGN(4K);
e_bss = .;
ekernel = .;
/DISCARD/ : {
*(.eh_frame)
}
}
''')
f.close()