From: Lunaixsky Date: Fri, 30 Aug 2024 23:53:01 +0000 (+0100) Subject: Boot framework rework (#45) X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/commitdiff_plain/bffa3430fbbaaad29bec0b5bee9c1f0bfc7fd068?ds=sidebyside;hp=bffa3430fbbaaad29bec0b5bee9c1f0bfc7fd068 Boot framework rework (#45) * remove need of grub and iso image booting * adjust the build process and bootstrap procedure, to bypass the need of boot from iso image * feat: allow custom rootfs. * feat: add script to package rootfs with default layout. * fix: some left-over bugs in x86_32 * ref: change a typo * add `init=...` kernel option, decouple the init location * (multiboot) use address header to instruct multiboot compliance to load our kernel, to give us more flexibility * ref: make mkrootfs more flexible, by moving the rootfs structuring to usr/makefile * ref: some refectoring * fix: old mount point not being recovered when mount failed * fix deadlock when process killed while blocked by file io * fix: deadlock when process killed while blocked by file io. this bug is addressed somewhere in the past, however the latest refactoring break the logic. * fix: signal delivery does not check if the process being destroyed. * fix: procvm_mount and unmount now simply return if current mm is already the active one. * fix: signal group delivery always deliver the current one, which is not essentially true. * fix: incorrect thread group being terminated during terminate_process * fix: wake the blocked reader on line_in buffer when a signal is raised by some control character. * ref: some refectoring * introduce bootmem to handle memory allocation at boot stage * feat: bootmem is introduce to provide memory service before lunaix's mm is avaliable. The implementation detail is left to archiecture * ref: we moved the preparation of boot_handoff after we have setup the virtual memory, to remove abuse of .*.boot sections * fix: remove the .bss.boot, it is not a good idea to have that in the middle of address space. * feat: add a reclaimable region that will automatically unmapped after exiting the bootstrapping stage. All temporary stuff that only matter during bootstrapping should go there. * fix a statistical error in pmem usage stat * ref: change u32_t to unsigned int * dtb support (devicetre specification v0.4) * ref: remove trailing spaces * remap and load the dtb during kinit stage. * adjust the memory map of x86_32 to make room for dtb * injection of sanitized LOAD PHDRs for kernel to setup page tables * feat: add a small program: elftool that give less verbose output than readelf. This program relies purely on standard POSIX library thus maximizing portability. * manually planned program headers to make thing certain. * remove iso packing and boot disk probing * move -kernel/-append to autoqemu config * dynamic high-memory setup based on linking time generated map * fix: (vm) NX bit being lost due to incorrect pte attribute mask * fix: (vm) instruction fetch permission issue. differentiate the permission for intermediate level from leaf level. * fix: unify all auto-generated data, now their exposed symbol are starts with __autogen_ * update readme, clean up out-dated stuff ---