diff --git a/loader/SConscript b/loader/SConscript index 15f1811..c472f5a 100644 --- a/loader/SConscript +++ b/loader/SConscript @@ -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') diff --git a/scripts/loader/generate_break_virtual.py b/scripts/loader/generate_loader_asm.py similarity index 78% rename from scripts/loader/generate_break_virtual.py rename to scripts/loader/generate_loader_asm.py index 8d2b296..8bcc18c 100755 --- a/scripts/loader/generate_break_virtual.py +++ b/scripts/loader/generate_loader_asm.py @@ -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'), \