mirror of
https://github.com/drasko/codezero.git
synced 2026-01-14 03:43:15 +01:00
Created images.S for loader with a script so that kernel.elf and containers.elf are not hard-coded
This commit is contained in:
@@ -11,10 +11,12 @@ Import('env')
|
||||
|
||||
|
||||
PROJRELROOT = '../../'
|
||||
|
||||
# FIXME This may be the scons binary path! But how does the below imports work then?
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(sys.modules['__main__'].__file__), PROJRELROOT)))
|
||||
|
||||
from config.projpaths import *
|
||||
from scripts.loader.generate_break_virtual import *
|
||||
from scripts.loader.generate_loader_asm import *
|
||||
|
||||
#loader_ksyms = generate_ksym_to_loader(join(PROJROOT, 'loader/ksyms.S'), \
|
||||
# join(BUILDDIR, 'kernel.elf'))
|
||||
@@ -24,10 +26,18 @@ from scripts.loader.generate_break_virtual import *
|
||||
def ksym_to_loader(target, source, env):
|
||||
generate_ksym_to_loader(target[0].path, source[0].path)
|
||||
|
||||
def gen_loader_images_S(target, source, env):
|
||||
generate_image_S(target[0].path, source)
|
||||
|
||||
loader_ksyms = Command(join(PROJROOT, 'loader/ksyms.S'), join(BUILDDIR, 'kernel.elf'), ksym_to_loader)
|
||||
loader_image_S = Command(join(PROJROOT, 'loader/images.S'), \
|
||||
[join(BUILDDIR, 'kernel.elf'), \
|
||||
join(BUILDDIR, 'conts/containers.elf')], \
|
||||
gen_loader_images_S)
|
||||
|
||||
src = Glob('*.[cS]')
|
||||
objs = env.Object(src)
|
||||
|
||||
Depends(src, loader_ksyms)
|
||||
Depends(src, loader_image_S)
|
||||
Return('objs')
|
||||
|
||||
@@ -62,6 +62,28 @@ def generate_ksym_to_loader(target_path, source_path):
|
||||
(symbol, symbol, symbol, \
|
||||
address_remove_literal(address)))
|
||||
|
||||
decl_sect_asm = \
|
||||
'''
|
||||
.align 4
|
||||
.section %s
|
||||
.incbin "%s"
|
||||
'''
|
||||
|
||||
|
||||
def generate_image_S(target_path, images):
|
||||
kern_fname = 'kernel.elf'
|
||||
conts_fname = 'containers.elf'
|
||||
fbody = ''
|
||||
with open(target_path, 'w+') as images_S:
|
||||
for img in images:
|
||||
# print img[:-len(kern_fname)]
|
||||
print os.path.basename(img.path)
|
||||
if os.path.basename(img.path) == kern_fname:
|
||||
fbody += decl_sect_asm % ('.kernel', img)
|
||||
if os.path.basename(img.path) == conts_fname:
|
||||
fbody += decl_sect_asm % ('.containers', img)
|
||||
images_S.write(fbody)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) == 1:
|
||||
generate_ksym_to_loader(join(PROJROOT, 'loader/ksyms.S'), \
|
||||
Reference in New Issue
Block a user