commit 68d2febf4860768d02aaa134cfcac0fa3ee35508 from: int16h date: Fri Dec 5 12:23:19 2025 UTC -Last commit before process accounting- commit - b8d611242cec2588168e3fc461c196f1a722bbfb commit + 68d2febf4860768d02aaa134cfcac0fa3ee35508 blob - 7c0ac70927c6f8ba0d6a8e3274de06e8d210fc9a blob + 8cbed6759e558db8c894ae3f26f3718a3b539ee1 --- GNUmakefile +++ GNUmakefile @@ -669,7 +669,7 @@ endif ifeq ($(ARCH),arm64) run-arm64: legacy - qemu-system-aarch64 -machine virt -cpu cortex-a72 -m 2048M -smp 2 \ + qemu-system-aarch64 -machine virt -cpu cortex-a72 -m 2048M -smp cores=2,threads=2,sockets=2 \ -kernel $(ARCH_DIR)/kernel.elf \ -serial stdio -monitor none -nographic else blob - dd3a9209ec3935ae87f7fff04a1b7f838bbca7bb blob + 1afbf3d8b959e3ac9acb64c0114e713eb8bdd530 --- README.md +++ README.md @@ -6,7 +6,7 @@ A WIP POSIX-compliant microkernel and Unix-like operat Lenix targets a secure, efficient, enterprise-grade footprint that can scale from single-board computers to virtualized deployments (QEMU/KVM, OpenBSD VMM, and Bhyve). The initial bring-up focuses on x86_64 and arm64/aarch64 with planned RISC-V64 support once the core subsystems mature. Symmetric multiprocessing and distributed capabilities are in scope from the outset so the system can span multi-core boards and clustered environments. -The kernel follows a microkernel architecture inspired by Minix, GNU/Hurd, Mach, OpenBSD, IRIX, OpenVMS, Sortix, and Plan 9, emphasizing clear privilege boundaries, message-passing services, and network-transparent interfaces. +The kernel follows a microkernel architecture inspired by Minix, GNU/Hurd, Mach,as well as OpenBSD, IRIX, OpenVMS, and Plan 9 - emphasizing clear privilege boundaries, message-passing services, and network-transparent interfaces. Because IPC is the lifeblood of any microkernel, Lenix will grow a first-class message-passing framework that lets user-mode servers exchange capabilities, share memory safely, and marshal POSIX-style requests without collapsing isolation guarantees. Every subsystem we add (drivers, filesystems, network stacks) is expected to live behind that IPC surface so scaling out to distributed deployments remains straightforward. @@ -20,17 +20,14 @@ We will begin with tarfs+tmpfs support, then ext2, the We will use musl or another modern, POSIX-complient libc implementation (or, preferably, our own implementation). -All code is written following OpenBSD's style(9). - Some of the following documentation may be outdated - check changelog.md and roadmap.md for a better idea of the current state of the microkernel. ## Known major issues and blockers - IPC/VFS timing (or something else!) can cause intermittent boot problems. -- Early console and TTY needs more work, sometimes there is corruption and output of what looks like other parts of memory. -- Slow operations in shell - delays spawning and intermittent hangs +- Intermittent hangs - arm64 support is lagging behind -- Entire codebase needs refined and possibly restructured. +- SMP needs work ## Toolchain @@ -100,7 +97,7 @@ Rebuild images with musl staged: `gmake rootfs` and/or ```bash # x86_64 legacy + UEFI artifacts: -make clean && make ARCH=x86_64 -j4 && make package-apps && make package-apps && make initrd && make efi && make iso +make clean && make ARCH=x86_64 -j4 && make package-runtime && make package-apps && make initrd && make efi && make iso # ARM64 (QEMU virt) legacy kernel: ARCH=arm64 make legacy blob - 2f2f632d5eb6672d60d600fd52b401c2f15ef189 blob + 94a71cb4192b0332491461bbad0974cda84e4b50 --- kernel/console/service.c +++ kernel/console/service.c @@ -740,6 +740,13 @@ console_task_main(void *arg) sched_yield(); continue; } + if (entry.len > CONSOLE_LINE_MAX) { + entry.len = CONSOLE_LINE_MAX; + entry.buf[CONSOLE_LINE_MAX - 1] = '\0'; + } else { + if (entry.len == 0 || entry.buf[entry.len] != '\0') + entry.buf[(entry.len < CONSOLE_LINE_MAX) ? entry.len : (CONSOLE_LINE_MAX - 1)] = '\0'; + } console_process_line(entry.buf); } } @@ -1007,7 +1014,7 @@ console_service_register_ttyctl(struct sched_task *tas * early_console_write() will continue to buffer messages to the ring * buffer for audit/diagnostics, but won't write to serial. * PTY master output (console_master_write) becomes the only path to serial. */ - //reearly_console_disable_serial_write(); + //early_console_disable_serial_write(); #ifdef LENIX_DEBUG serial_write("[console] early console serial writes disabled\n", 48); #endif