From 6ecd0a79ef03302f346ea2fb1de552341ff66675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Stefanik?= Date: Tue, 13 Feb 2024 18:23:58 +0100 Subject: [PATCH] Exclude bootstrap-seeds from kernel bootstrap images In kernel bootstrap mode, the kernel (builder-hex0) includes the ability to assemble hex0 source code, and to execute basic commands, obviating the need for the bootstrap-seeds subdirectory. With the bootstrap-seeds directory excluded, the image consists of purely source code, with the exception of the boot sector, which is assembled from hex0 code by rootfs.py, and delivered ready for BIOS to boot. --- lib/generator.py | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/lib/generator.py b/lib/generator.py index 1828fc6..5ca1e55 100755 --- a/lib/generator.py +++ b/lib/generator.py @@ -78,7 +78,7 @@ class Generator(): shutil.copy2(os.path.join(self.git_dir, 'seed', 'preseeded.kaem'), os.path.join(self.target_dir, 'kaem.x86')) else: - self.stage0_posix() + self.stage0_posix(kernel_bootstrap) self.seed() self.steps() @@ -109,10 +109,12 @@ class Generator(): shutil.copytree(os.path.join(self.git_dir, 'steps'), os.path.join(self.target_dir, 'steps')) - def stage0_posix(self): + def stage0_posix(self, kernel_bootstrap=False): """Copy in all of the stage0-posix""" stage0_posix_base_dir = os.path.join(self.git_dir, 'seed', 'stage0-posix') for entry in os.listdir(stage0_posix_base_dir): + if kernel_bootstrap and entry == 'bootstrap-seeds': + continue orig = os.path.join(stage0_posix_base_dir, entry) target = os.path.join(self.target_dir, entry) if os.path.isfile(orig): @@ -120,10 +122,12 @@ class Generator(): else: shutil.copytree(orig, target) - arch = stage0_arch_map.get(self.arch, self.arch) - kaem_optional_seed = os.path.join(self.git_dir, 'seed', 'stage0-posix', 'bootstrap-seeds', - 'POSIX', arch, 'kaem-optional-seed') - shutil.copy2(kaem_optional_seed, os.path.join(self.target_dir, 'init')) + if not kernel_bootstrap: + arch = stage0_arch_map.get(self.arch, self.arch) + kaem_optional_seed = os.path.join(self.git_dir, 'seed', 'stage0-posix', + 'bootstrap-seeds', 'POSIX', arch, + 'kaem-optional-seed') + shutil.copy2(kaem_optional_seed, os.path.join(self.target_dir, 'init')) def seed(self): """Copy in extra seed files""" @@ -193,17 +197,32 @@ class Generator(): self.output_tree(image_file, '.') # Add commands to kick off stage0-posix - cmd = ' '.join(['hex0', - './bootstrap-seeds/POSIX/x86/hex0_x86.hex0', - './bootstrap-seeds/POSIX/x86/hex0-seed\n']) + cmd = ' '.join(['src', + '0', + '/bootstrap-seeds\n']) + image_file.write(cmd.encode()) + cmd = ' '.join(['src', + '0', + '/bootstrap-seeds/POSIX\n']) + image_file.write(cmd.encode()) + cmd = ' '.join(['src', + '0', + '/bootstrap-seeds/POSIX/x86\n']) image_file.write(cmd.encode()) cmd = ' '.join(['hex0', - './bootstrap-seeds/POSIX/x86/kaem-minimal.hex0', - './bootstrap-seeds/POSIX/x86/kaem-optional-seed\n']) + '/x86/hex0_x86.hex0', + '/bootstrap-seeds/POSIX/x86/hex0-seed\n']) image_file.write(cmd.encode()) - cmd = ' '.join(['./bootstrap-seeds/POSIX/x86/kaem-optional-seed', './kaem.x86\n']) + cmd = ' '.join(['hex0', + '/x86/kaem-minimal.hex0', + '/bootstrap-seeds/POSIX/x86/kaem-optional-seed\n']) + image_file.write(cmd.encode()) + cmd = ' '.join(['hex0', + '/x86/kaem-minimal.hex0', + '/init\n']) + image_file.write(cmd.encode()) + cmd = ' '.join(['/bootstrap-seeds/POSIX/x86/kaem-optional-seed', '/kaem.x86\n']) image_file.write(cmd.encode()) - os.chdir(save_cwd) def create_builder_hex0_disk_image(self, image_file_name, size):