feat: Add certs, init, io_uring, security, usr, virt subsystems, Nano editor & full LazyBox suite

This commit is contained in:
subhobhai943 committed 2026-08-16 22:36:52 +05:30
1 parent ae5f4a96c4
commit 5662be29f5
27 files changed
+1870 -333

No files matched your search

+123 -155
View File
@@ -11,11 +11,12 @@
[![Architecture](https://img.shields.io/badge/arch-x86__64%20Long%20Mode-blue.svg?style=flat-square)]()
[![Kernel](https://img.shields.io/badge/kernel-Modular%20Monolithic-red.svg?style=flat-square)]()
[![Userland](https://img.shields.io/badge/userland-LazyBox%20v2.0.0--pro-orange.svg?style=flat-square)]()
[![Version](https://img.shields.io/badge/version-v0.2.0--lts%20(Titan)-purple.svg?style=flat-square)]()
[![Userland](https://img.shields.io/badge/userland-LazyBox%20v2.0.0--pro%20%2B%20Nano-orange.svg?style=flat-square)]()
[![Networking](https://img.shields.io/badge/network-Intel%20E1000%20Gigabit%20%7C%20IPv4-green.svg?style=flat-square)]()
[![License](https://img.shields.io/badge/license-MIT-purple.svg?style=flat-square)](LICENSE)
[![License](https://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat-square)](LICENSE)
**SUB-OS** is an open-source, production-grade 64-bit modular monolithic operating system engineered from the ground up for the `x86_64` architecture. It is built adhering to the internal design principles of modern UNIX/Linux kernels, featuring full bare-metal hardware drivers, physical and dynamic memory management, a virtual file system (VFS), networking protocol stack, cryptographic engine, and the **LazyBox** multi-call userland environment.
**SUB-OS** is an open-source, production-grade 64-bit modular monolithic operating system engineered from the ground up for the `x86_64` architecture. It is built adhering to the internal design principles of modern UNIX/Linux kernels, featuring full bare-metal hardware drivers, physical and dynamic memory management, a virtual file system (VFS), networking protocol stack, cryptographic engine, Linux Security Modules (LSM), asynchronous `io_uring` ringbuffers, hypervisor detection, full-screen visual `nano` editor, and the **LazyBox** multi-call userland environment.
---
@@ -24,20 +25,23 @@
```text
+-------------------------------------------------------------------------+
| USERLAND & SYSTEM SUITE |
| Interactive Shell | LazyBox Applets (ls, cat, ping, sha256sum, ...) |
| Interactive Shell | GNU Nano 2.0.0 | LazyBox Suite (ls, cat, ping, ...) |
+-------------------------------------------------------------------------+
| VIRTUAL FILE SYSTEM (VFS) |
| vfs_namei | Root RAMFS | /dev (devfs) | /proc (procfs) |
| vfs_namei | Root RAMFS | /dev (devfs) | /proc (procfs) | initramfs |
+-------------------------------------------------------------------------+
| ASYNC I/O ENGINE & SECURITY FRAMEWORK |
| io_uring (SQE/CQE Rings) | Linux Security Modules (LSM) | Keyring |
+-------------------------------------------------------------------------+
| CORE SERVICES & CRYPTO ENGINE |
| Preemptive Scheduler | Task Control (PCB) | SHA-256 | MD5 | CRC32|PRNG |
| Preemptive Scheduler | Task Control | SHA-256 | MD5 | CRC32 | PRNG |
+-------------------------------------------------------------------------+
| MEMORY MANAGEMENT (MM) |
| Physical Page Frame Allocator (PMM) | Kernel Heap (kmalloc/kfree) |
+-------------------------------------------------------------------------+
| DEVICE DRIVER TREE |
| DEVICE DRIVER TREE & VIRT |
| VGA / TTY1-4 | 16550 UART Serial | PS/2 Keyboard | ATA / IDE Disk |
| PCI Enumerator | Intel E1000 NIC | Net (ARP/IPv4/ICMP) | PC Speaker |
| PCI Enumerator | Intel E1000 NIC | VirtIO Core | PC Speaker |
+-------------------------------------------------------------------------+
| HARDWARE ABSTRACTION LAYER (HAL) |
| x86_64 Long Mode | GDT / TSS | IDT / ISRs | Dual 8259A PIC | 8254 PIT |
@@ -46,189 +50,153 @@
---
## ⚡ 11-Step Master Boot Pipeline
## ⚡ 14-Step Master Boot Pipeline
During boot, the kernel executes a deterministic 11-step master initialization sequence:
During boot, the kernel executes a deterministic 14-step master initialization sequence:
| Step | Subsystem | Description |
|:---:|:---|:---|
| **[1/11]** | **64-Bit GDT & TSS** | Configures flat kernel/user code & data segments and Task State Segment with dedicated 64KB kernel stack. |
| **[2/11]** | **IDT & ISR Table** | Populates 256-entry interrupt descriptor table with CPU exception handlers and hardware IRQ routing. |
| **[3/11]** | **Dual 8259A PIC** | Remaps master (IRQ 0-7 -> 0x20-0x27) and slave (IRQ 8-15 -> 0x28-0x2F) interrupt controllers. |
| **[4/11]** | **8254 PIT Timer** | Configures channel 0 for 100 Hz (10ms resolution) driving quantum preemption. |
| **[5/11]** | **PS/2 Keyboard** | Full scancode translation table with circular ringbuffer, Shift, CapsLock, and multi-TTY switching. |
| **[6/11]** | **Physical Memory Manager** | 64-bit bitmap frame allocator tracking usable RAM via BIOS E820 map (31,712 free 4KB pages). |
| **[7/11]** | **Kernel Dynamic Heap** | Boundary-tag dynamic heap allocator with 4 MB initial pool, coalescing, and reallocation. |
| **[8/11]** | **ATA / IDE Storage** | 28-bit LBA PIO hard disk controller supporting sector read/write operations on primary master. |
| **[9/11]** | **PCI & Intel E1000 NIC** | PCI bus enumerator, BAR configuration, and Intel 82540EM Gigabit NIC with circular DMA RX/TX descriptors. |
| **[10/11]** | **Virtual File System** | Mounts root in-memory RAMFS, synthetic `/dev` devfs, and dynamic `/proc` procfs. |
| **[11/11]** | **Scheduler & LazyBox** | Starts round-robin preemptive scheduler and launches LazyBox interactive userland environment. |
| **[1/14]** | **64-Bit GDT & TSS** | Configures flat kernel/user code & data segments and Task State Segment with dedicated 64KB kernel stack. |
| **[2/14]** | **IDT & ISR Table** | Populates 256-entry interrupt descriptor table with CPU exception handlers and hardware IRQ routing. |
| **[3/14]** | **Dual 8259A PIC** | Remaps master (IRQ 0-7 -> 0x20-0x27) and slave (IRQ 8-15 -> 0x28-0x2F) interrupt controllers. |
| **[4/14]** | **8254 PIT Timer** | Configures channel 0 for 100 Hz (10ms resolution) driving quantum preemption. |
| **[5/14]** | **PS/2 Keyboard** | Full scancode translation table with circular ringbuffer, Shift, CapsLock, Ctrl keys, and multi-TTY switching. |
| **[6/14]** | **Physical Memory Manager** | 64-bit bitmap frame allocator tracking usable RAM via BIOS E820 map (31,712 free 4KB pages). |
| **[7/14]** | **Kernel Dynamic Heap** | Boundary-tag dynamic heap allocator with 4 MB initial pool, coalescing, and reallocation. |
| **[8/14]** | **ATA / IDE Storage** | 28-bit LBA PIO hard disk controller supporting sector read/write operations on primary master. |
| **[9/14]** | **PCI, VirtIO & Net** | PCI bus enumerator, VirtIO core, and Intel 82540EM Gigabit NIC with circular DMA RX/TX descriptors. |
| **[10/14]** | **Security & Keyring** | Loads X.509 trusted certificate authority keyring and enforces POSIX Capabilities Linux Security Module (LSM). |
| **[11/14]** | **io_uring Subsystem** | Lockless Submission Queue Entry (SQE) & Completion Queue Entry (CQE) asynchronous I/O engine. |
| **[12/14]** | **Virtual File System** | Mounts root in-memory RAMFS, synthetic `/dev` devfs, `/proc` procfs, and unpacks embedded initramfs tree. |
| **[13/14]** | **Scheduler & LazyBox** | Starts round-robin preemptive scheduler and launches LazyBox interactive userland environment. |
| **[14/14]** | **Hardware Interrupts** | Enables processor interrupts (`sti`) and transitions to userland shell. |
---
## 🌟 Subsystems Overview
## 🌟 Subsystems & Linux Directory Structure
### 1. Bootloader & Kernel Core (`arch/x86_64/`, `kernel/`)
- **Two-Stage Custom MBR Bootloader**:
- `stage1.asm`: 512-byte MBR sector loaded at `0x7C00` that loads Stage 2 using BIOS INT 13h extensions.
- `stage2.asm`: Enables A20 line, queries E820 memory map, builds 4-level PML4 identity paging tables (4GB address space), transitions through 32-bit Protected Mode into 64-bit Long Mode, and loads kernel in 64-sector chunks.
- `boot/boot.asm`: 512-byte MBR sector loaded at `0x7C00` that loads Stage 2 using BIOS INT 13h extensions.
- `boot/stage2.asm`: Enables A20 line, queries E820 memory map, builds 4-level PML4 identity paging tables (4GB address space), transitions through 32-bit Protected Mode into 64-bit Long Mode, and loads kernel in 64-sector chunks.
- **Preemptive Multi-Tasking**: Process Control Blocks (PCB), round-robin task scheduler driven by timer ticks, atomic spinlocks, and semaphores.
- **Kernel Logging & Serial Diagnostics**: ANSI color `printk()` supporting loglevels (`KERN_INFO`, `KERN_WARN`, `KERN_ERR`), a 64KB kernel `dmesg` ring buffer, and simultaneous output to COM1 serial port.
### 2. Memory Management Subsystem (`mm/`)
### 2. Early Initialization & Versioning (`init/`)
- `init/cmdline.c`: Kernel command line parsing (`root=`, `console=`, `init=`, `quiet`, etc.) and system runlevel management (`RUNLEVEL_SINGLE`, `RUNLEVEL_MULTIUSER`, `RUNLEVEL_GRAPHICAL`).
- `init/version.c`: Version metadata and banner formatting.
### 3. X.509 Cryptographic Keyring (`certs/`)
- `certs/x509.c`: ASN.1 DER parser for X.509 v3 public key certificates (Subject, Issuer, Validity, SHA-256 Fingerprint, RSA/ECDSA trust validation).
- System trusted keyring supporting kernel module and executable signature verification.
### 4. Asynchronous I/O Engine (`io_uring/`)
- `io_uring/io_uring.c`: High-performance non-blocking asynchronous I/O ringbuffers with SQE (Submission Queue Entries) and CQE (Completion Queue Entries) for concurrent disk and network I/O.
### 5. Linux Security Modules & Capabilities (`security/`)
- `security/lsm.c`: Hookable security infrastructure with DAC and MAC permission callbacks.
- `security/capability.c`: POSIX Capabilities model (`CAP_CHOWN`, `CAP_DAC_OVERRIDE`, `CAP_NET_RAW`, `CAP_SYS_ADMIN`, etc.).
### 6. Userspace Initramfs & Payload (`usr/`)
- `usr/initramfs.c`: Populates filesystem tree (`/usr/bin`, `/var/log`, `/etc/passwd`, `/etc/issue`, `/etc/fstab`).
### 7. Virtualization & VirtIO Subsystem (`virt/`)
- `virt/hypervisor.c`: Hypervisor detection via CPUID leaves (QEMU, KVM, VMware, VirtualBox, Hyper-V).
- `virt/virtio.c`: VirtIO core device driver registration and split virtqueue framework.
### 8. Memory Management Subsystem (`mm/`)
- **Physical Memory Manager (`pmm.c`)**: Page frame allocator managing physical RAM using a high-efficiency bitmap.
- **Kernel Dynamic Heap (`kmalloc.c`)**: Provides `kmalloc`, `kzalloc`, `kcalloc`, `krealloc`, and `kfree` with boundary tag headers and adjacent block coalescing.
### 3. Virtual File System (`fs/`)
### 9. Virtual File System (`fs/`)
- **Unified VFS Core (`vfs.c`)**: Posix-like file operations (`open`, `read`, `write`, `close`, `lseek`, `mkdir`, `create`) with hierarchical path resolution (`vfs_namei`) and support for up to 64 file descriptors.
- **Root RAMFS (`ramfs.c`)**: Dynamic in-memory directory and file tree with auto-expanding data buffers.
- **Synthetic Device Filesystem (`devfs.c`)**: Mounted at `/dev`, providing `/dev/null`, `/dev/zero`, `/dev/random`, `/dev/urandom`, and `/dev/tty`.
- **Dynamic Information Filesystem (`procfs.c`)**: Mounted at `/proc`, providing live virtual metrics via `/proc/version`, `/proc/meminfo`, and `/proc/cpuinfo`.
- **Process Metrics Filesystem (`procfs.c`)**: Mounted at `/proc`, generating dynamic metrics (`/proc/version`, `/proc/meminfo`, `/proc/cpuinfo`, `/proc/uptime`, `/proc/net/dev`).
### 4. Device Drivers (`drivers/`)
- **Virtual Terminals (`tty.c`)**: Four independent virtual terminals (`tty1`-`tty4`) with ANSI escape code processing, cursor positioning, and `Alt+F1`-`Alt+F4` switching.
- **Storage Controller (`ata.c`)**: ATA PIO mode driver for 28-bit LBA hard disk operations.
- **PCI Bus Enumerator (`pci.c`)**: Discovers hardware devices across buses, slots, and functions, reading vendor/device IDs and mapping BARs.
- **Intel E1000 Gigabit NIC (`e1000.c`)**: Configures receive/transmit circular DMA rings, link state auto-negotiation, and hardware packet dispatch.
- **Audio (`speaker.c`)**: Square-wave audio generation using PIT Channel 2.
### 10. Hardware Drivers (`drivers/`)
- **VGA & TTY (`vga.c`, `tty.c`)**: 80x25 text mode driver with 4 Virtual Consoles (TTY1-4 switched via `Alt+F1`–`Alt+F4`) and full ANSI escape sequence parsing.
- **Serial Port (`serial.c`)**: 16550 UART COM1 driver at 115200 baud.
- **PS/2 Keyboard (`keyboard.c`)**: Interrupt-driven scancode decoder with modifier state machine and full Ctrl+key combination mapping.
- **ATA / IDE Disk (`ata.c`)**: 28-bit LBA PIO disk controller.
- **PCI Bus (`pci.c`)**: Enumeration and Base Address Register (BAR) configuration.
- **Intel E1000 Gigabit NIC (`e1000.c`)**: Intel 82540EM Gigabit NIC driver with hardware DMA ringbuffers.
- **PC Speaker (`speaker.c`)**: Programmable timer channel 2 tone generator.
### 5. Network Stack (`net/core/`)
- Layer 2 Ethernet frame encapsulation and MAC parsing.
- ARP request/reply generation and dynamic ARP caching.
- IPv4 packet validation, header checksumming, and gateway routing.
- ICMP Echo Request/Reply client and server (`ping`).
### 6. Cryptography Engine (`crypto/`)
- **SHA-256**: FIPS 180-4 compliant 256-bit message digest.
- **MD5**: RFC 1321 compliant 128-bit hashing algorithm.
- **CRC32**: IEEE 802.3 standard cyclic redundancy check.
- **PRNG**: Xorshift128+ cryptographic pseudorandom generator.
### 11. Cryptography Engine (`crypto/`)
- **SHA-256 (`sha256.c`)**: FIPS 180-4 compliant 256-bit cryptographic digest.
- **MD5 (`md5.c`)**: RFC 1321 compliant 128-bit hash function.
- **CRC32 (`crc32.c`)**: IEEE 802.3 standard cyclic redundancy check.
- **PRNG (`prng.c`)**: Xorshift128+ cryptographic pseudo-random number generator.
---
## 💻 LazyBox Multi-Call Userland Suite
## 📝 Full-Screen Visual Nano Editor
**LazyBox** (`userland/lazybox/`) provides a single-binary multi-call command suite inspired by BusyBox:
SUB-OS includes a full-screen interactive ANSI text editor (`nano`):
| Category | Applets |
```text
GNU nano 2.0.0 File: /home/user/notes.txt [Modified]
Hello from nano editor in SUB-OS!
This is a production-level modular operating system.
You can write, edit, search, and save files directly to the VFS.
~
~
~
~
~
~
~
~
~
~
~
[ Wrote 148 bytes to /home/user/notes.txt ]
^G Get Help ^O WriteOut ^W Where Is ^K Cut Line ^U Paste ^X Exit
```
### Keybindings:
- **`^O` (Ctrl+O)**: WriteOut / Save file to Virtual File System.
- **`^X` (Ctrl+X)**: Exit Nano and return to shell.
- **`^K` (Ctrl+K)**: Cut current line to cut-buffer.
- **`^U` (Ctrl+U)**: Uncut / Paste line at cursor position.
- **`^G` (Ctrl+G)**: Display help cheat sheet.
- **`Arrow Keys` / `Home` / `End` / `PgUp` / `PgDn`**: Smooth cursor navigation.
---
## 🧰 LazyBox Multi-Call Userland Suite
SUB-OS ships with an extensive multi-call userland binary suite (`lazybox`):
| Category | Commands |
|---|---|
| **Filesystem** | `ls`, `cat`, `touch`, `mkdir`, `wc` |
| **Crypto** | `sha256sum`, `md5sum`, `crc32` |
| **Core** | `lazybox`, `echo`, `whoami`, `id`, `date`, `cal` |
| **Filesystem & Editor** | `nano`, `ls`, `cat`, `touch`, `mkdir`, `pwd`, `cd`, `wc`, `head`, `tail`, `stat`, `cp`, `grep`, `hexdump` |
| **Crypto & Security** | `sha256sum`, `md5sum`, `crc32`, `rand`, `certcheck`, `capsh` |
| **Network** | `ifconfig`, `ping`, `arp` |
| **Storage** | `hdparm` |
| **System** | `uname`, `free`, `uptime`, `dmesg`, `sleep` |
| **Terminal** | `clear`, `neofetch` |
| **Core** | `lazybox`, `echo`, `calc` |
| **Storage & Devices** | `hdparm`, `lspci`, `speaker` |
| **Virtualization** | `virtinfo`, `io_uring_test` |
| **System Monitoring** | `uname`, `free`, `uptime`, `dmesg`, `ps`, `top`, `sleep`, `reboot`, `poweroff` |
| **Terminal** | `clear`, `neofetch`, `help` |
---
## 📺 Live Output Demonstrations
### 1. `neofetch`
```text
sub-os> neofetch
_____ _ _ ____ OS: SUB-OS v0.2.0-lts (Modular Monolithic)
/ ____| | | | _ \ Arch: x86_64 (64-Bit Long Mode)
| (___ | | | | |_) | Kernel: Modular Drivers + VFS + Crypto + Net
\___ \| | | | _ < CPU: QEMU Virtual CPU (AuthenticAMD)
____) | |__| | |_) | Memory: 8 MB / 127 MB (Free: 119 MB)
|_____/ \____/|____/ Heap: 110 KB used / 4095 KB total
Uptime: 00:00:02
TTY: tty1 (Alt+F1-F4 to switch)
```
### 2. Network ICMP Ping (`ping 10.0.2.2`)
```text
sub-os> ping 10.0.2.2
PING 10.0.2.2 (56 data bytes):
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0 ms
64 bytes from 10.0.2.2: icmp_seq=2 ttl=64 time=0 ms
```
### 3. FIPS SHA-256 Cryptographic Hash (`sha256sum /readme.txt`)
```text
sub-os> sha256sum /readme.txt
4e0391a7fc1a293893645d3d40f103f2eb28d442d0b8815bf86473d0bfd8e7fd /readme.txt
```
### 4. Dynamic Process Information (`cat /proc/meminfo`)
```text
sub-os> cat /proc/meminfo
MemTotal: 130944 kB
MemFree: 122752 kB
MemAvailable: 122752 kB
Buffers: 0 kB
Cached: 110 kB
HeapTotal: 4096 kB
HeapUsed: 110 kB
HeapFree: 3985 kB
```
---
## 🛠️ Build and Emulation
## 🚀 Building & Running
### Prerequisites
- **Assembler**: `nasm` (>= 2.15)
- **Cross-Compiler**: `x86_64-elf-gcc` (>= 13.0) & `x86_64-elf-ld`
- **Emulator**: `qemu-system-x86_64`
- **Build System**: GNU `make`
- `gcc` (with `-ffreestanding`, `-fno-pie`, `-mcmodel=kernel`) or `x86_64-elf-gcc`
- `nasm` (Netwide Assembler)
- `qemu-system-x86_64` (for hardware virtualization)
### Building the OS
### Compilation
```bash
# Set cross-compiler path
export PATH="/usr/local/cross/bin:$PATH"
# Build kernel image (SUB-OS.img)
make
# Run in QEMU with Intel E1000 NIC and ATA drive
make run
# Clean build artifacts
make clean
make
```
---
## ⌨️ Terminal Keybindings
| Keybinding | Action |
|---|---|
| `Alt + F1` | Switch to **TTY1** (Main Interactive Shell) |
| `Alt + F2` | Switch to **TTY2** (Secondary Virtual Terminal) |
| `Alt + F3` | Switch to **TTY3** (System Diagnostics Terminal) |
| `Alt + F4` | Switch to **TTY4** (Background Task Terminal) |
| `Up / Down` | Command History Navigation |
| `Left / Right` | Interactive In-Line Cursor Navigation |
| `Backspace` | Character Erasure with Terminal Synchronisation |
| `Tab` | Command & Path Auto-Completion |
---
## 📁 Repository Structure
```text
SUB-OS/
├── arch/x86_64/ # CPU, Paging, GDT/TSS, IDT/ISR, PIC, PIT, CPUID
├── boot/ # Stage 1 MBR & Stage 2 64-bit Switch Bootloader
├── crypto/ # SHA-256, MD5, CRC32, CSPRNG
├── drivers/ # Character, Block, PCI, Network (E1000), Sound
├── fs/ # VFS Core, RAMFS, devfs, procfs
├── include/ # Complete Modular Kernel C Header Files
├── kernel/ # Main, Scheduler, Tasks, Synchronization, printk, Panic
├── lib/ # vsprintf, Strings, Bitmap
├── mm/ # Physical Page Allocator (PMM) & Heap (kmalloc)
├── net/core/ # Ethernet, ARP, IPv4, ICMP Protocol Stack
├── tools/ # Automated Setup and Cross-Compiler Scripts
├── userland/lazybox/ # LazyBox Multi-Call Binary & Interactive Shell
├── Makefile # Complete Build Orchestrator
├── linker.ld # Kernel 64-bit Linker Script
└── README.md # Documentation & Specifications
### Emulation in QEMU
```bash
# Run with Intel Gigabit NIC, ATA drive, PC Speaker, and Serial Console
qemu-system-x86_64 -drive format=raw,file=SUB-OS.img -nic model=e1000 -serial stdio -audiodev id=snd0,driver=pa -machine pcspk-audiodev=snd0
```
---
## 📄 License
This project is licensed under the terms of the [MIT License](LICENSE).