(WIP) Loader for 64 bit kernel.

This commit is contained in:
2024-01-14 12:55:41 +01:00
parent 408e06b2e0
commit cd20e87196
11 changed files with 470 additions and 9 deletions

View File

@@ -18,15 +18,40 @@ crtend_o = get_crt_object('crtend.o')
crti_o = env.Object('src/crt/crti.s')
crtn_o = env.Object('src/crt/crtn.s')
i686_sources = Split('''
src/kernel/boot.s
x86_64_sources = Split('''
src/kernel/startup.cpp
''')
env['LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', f'{crti_o[0].abspath} {crtbegin_o} $_LIBFLAGS {crtend_o} {crtn_o[0].abspath}')
env['KERNEL_LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', f'{crti_o[0].abspath} {crtbegin_o} $_LIBFLAGS {crtend_o} {crtn_o[0].abspath}')
env.Append(KERNEL_SOURCES = [env.File(f) for f in i686_sources])
env.Append(KERNEL_DEPENDENCIES = [crti_o, crtn_o])
x86_64_iso_files = [
{
"source": env.File("boot/grub.cfg"),
"target": "boot/grub/grub.cfg"
},
{
"source": env.File("#os.bin"),
"target": "boot/os.bin"
},
{
"source": env.File("#loader.bin"),
"target": "boot/loader.bin"
}
]
# also compile the loader (as i686-elf)
loader_sources = Split('''
src/loader/boot.asm
''')
nasm_include_dir = env.Dir('src/loader')
prog_loader = env.Command(
'#loader.bin', 'src/loader/boot.asm', f'nasm -I"{nasm_include_dir.abspath}" "$SOURCE" -f bin -o "$TARGET"'
)
# finally update the environment
env.Append(KERNEL_SOURCES = [env.File(f) for f in x86_64_sources])
env.Append(KERNEL_DEPENDENCIES = [crti_o, crtn_o, prog_loader])
env.Append(LINKFLAGS = ['-mcmodel=large', '-mno-red-zone', '-mno-mmx', '-mno-sse', '-mno-sse2'])
env.Append(ISO_FILES = x86_64_iso_files)
Return('env')