This commit adds the MINIX Kernel Refactoring: Foundational Overhaul (v0.1 - v0.2) document.
This document provides an overview of the foundational refactoring effort undertaken on the MINIX kernel, detailing the initial problem state, goals, key architectural changes implemented, current state, and guidance for future work.
I have placed the file in `minix/kernel/docs/MINIX_Kernel_Refactoring_v0.1-v0.2.md`.
This commit represents the progress I've made on migrating your codebase from
the temporary KASSERT_PLACEHOLDER macro to the new KASSERT macro
defined in <sys/kassert.h>.
**Work Completed:**
* **`minix/kernel/` (root directory files):**
* I processed all 30 `.c` and `.h` files in this directory.
* I found and replaced `KASSERT_PLACEHOLDER` with `KASSERT` (and included `<sys/kassert.h>`) in 6 files: `debug.c`, `interrupt.c`, `main.c`, `proc.c`, `smp.c`, and `system.c`.
* **`minix/kernel/system/` (system call handlers):**
* I processed all 38 `.c` files in this directory.
* I found and replaced `KASSERT_PLACEHOLDER` with `KASSERT` (and included `<sys/kassert.h>`) in 6 files: `do_copy.c`, `do_fork.c`, `do_mcontext.c`, `do_runctl.c`, `do_safecopy.c`, and `do_vumap.c`.
**Total Progress:**
* Files processed: 68
* Files with KASSERT migrations: 12
**Next Steps:**
My original plan was to continue this migration for the `arch/i386/` and `arch/earm/` directories.
**Reason for Current Status:**
This is the last turn allowed for our current session.
**Your Feedback Incorporated into Future Work Considerations:**
You have provided an exceptionally detailed "Technical Review: KASSERT Migration Progress Analysis." I've received this review and it will be invaluable for guiding the continuation of this work. Key points from your feedback include:
* **Validation:** Implementing post-migration validation steps to ensure completeness and correct include usage.
* **Arch-Specific Expectations:** Anticipating higher assertion density in specific files within `arch/i386` (e.g., `memory.c`, `protect.c`) and `arch/earm`.
* **Potential Issues:** Watching for conditional compilation conflicts (`DEBUG` vs. `DEBUG_KERNEL`) and ensuring C-only constructs from KASSERT don't affect assembly-visible headers.
* **Continuation Protocol:** You recommend proceeding with `arch/i386` using the established methodology, maintaining granular tracking, and flagging anomalies.
* **Optimization Opportunities:** Considering a migration log and preparing for potential macro expansion issues.
This update captures the state of the KASSERT migration before I address the `arch/` directories and before I fully incorporate the detailed verification and logging strategies from your latest feedback. I will resume based on this feedback in our next session.
This commit addresses critical architectural deficiencies in the MINIX kernel build and source structure. The changes are based on a comprehensive technical review and aim to establish a cleaner, more robust foundation for future kernel development.
Key changes include:
1. **Kernel-Specific Type System:**
* I introduced `minix/kernel/include/minix/kernel_types.h`.
* I defined kernel-specific types (e.g., `k_size_t`, `k_pid_t`) and fixed-width integer types (e.g., `k_uint32_t`) to replace userspace types.
2. **Kernel-Space Library (`klib`):**
* I created a new kernel library (`klib`) located in `minix/kernel/klib/`.
* I implemented basic string functions (`kstrlen`, `kstrlcpy`, `kstrcmp`) in `kstring.c`.
* I implemented basic memory functions (`kmemcpy`, `kmemset`, `kmemmove`) in `kmemory.c`.
* I added stub implementations for `kprintf`, `ksprintf`, and `kvprintf` in `kprintf_stub.c`, along with a `KASSERT_PLACEHOLDER` macro.
3. **Purged Userspace Dependencies:**
* I systematically refactored all C and header files within `minix/kernel/` and its subdirectories (`system/`, `arch/i386/`, `arch/earm/`).
* I removed userspace includes (e.g., `<string.h>`, `<stdlib.h>`, `<stdio.h>`, `<assert.h>`, `<sys/types.h>`, `<signal.h>`, `<unistd.h>`).
* I replaced calls to userspace C library functions with their `klib` equivalents or marked them with `FIXME` comments if a direct replacement was not yet available (e.g., `atoi`, `strncmp`).
* I replaced userspace types with their `k_` prefixed kernel versions.
4. **Build System Reconstruction (Meson):**
* I replaced `minix/kernel/meson.build` with a new script designed for a proper kernel build.
* The new build system defines kernel-specific compiler flags, handles architecture detection (i386, x86_64), sets up correct include paths, and builds `klib` and the main kernel executable.
* Assembly file compilation and linkage are noted as TODOs in the Meson script.
**Next Steps & Known Issues:**
The kernel is not expected to build successfully immediately after these changes. A significant number of `FIXME` comments and identified issues need to be addressed in a proper build environment. These include:
* Defining numerous missing constants (error numbers, signal numbers, etc.).
* Providing kernel-safe implementations for macros like `offsetof`.
* Implementing missing `klib` functions (e.g., a real `kprintf`, `kstrncmp`, `kmemcmp`, `katoi`).
* Developing kernel-space signal handling and ELF loading mechanisms.
* Adding rules for compiling and linking assembly source files.
This refactoring establishes the necessary structure to tackle these remaining issues systematically.