Files
Deshab-OS/CODE/linux/README.md
T
2026-07-28 12:00:02 +08:00

3.3 KiB

Linux 6.6 LTS for UTSM Dual-Kernel Architecture

Overview

This directory contains the Linux 6.6 LTS configuration and build scripts for the UTSM + Linux dual-kernel architecture. Linux runs as a VMX non-root guest under the UTSM hypervisor (VMX root).

Prerequisites

  • WSL (Windows Subsystem for Linux) with Ubuntu 22.04+ installed
    wsl --install -d Ubuntu-22.04
    
  • Build dependencies (inside WSL):
    sudo apt update
    sudo apt install -y build-essential bc flex bison libelf-dev libssl-dev cpio gzip git
    
  • ~3GB free disk space

Building Linux

1. From WSL

# Navigate to the project (adjust path for your WSL mount)
cd /mnt/d/Code/Deshab/CODE/linux

# Make the build script executable
chmod +x build.sh

# Run the build (clones Linux 6.6 LTS, configures, builds)
./build.sh

The build will:

  1. Clone Linux 6.6 LTS source to CODE/linux/src/
  2. Apply UTSM patches from CODE/linux/patches/ (if any)
  3. Configure with configs/utsm_x86_64_defconfig
  4. Build bzImage
  5. Copy to SYSTEM/boot/linux-bzImage
  6. Build initramfs if CODE/linux/initramfs/ exists

2. Enable in Limine

After building, uncomment the Linux module entries in SYSTEM/limine/limine.conf:

    module_path: boot():/boot/linux-bzImage
    module_cmdline: linux:bzImage
    module_path: boot():/boot/linux-initrd.img
    module_cmdline: linux:initrd

3. Rebuild the disk image

cd d:\Code\Deshab
.\build.bat

4. Test with QEMU

Note: VMX requires hardware virtualization support. QEMU's TCG (software emulation) does NOT support VMX instructions. To test the VMX path:

  • Real hardware: Boot on an Intel machine with VT-x enabled in BIOS
  • QEMU with WHPX: qemu-system-x86_64 -accel whpx -cpu max (may not expose nested VMX to the guest)
  • QEMU with KVM (Linux host only): qemu-system-x86_64 -enable-kvm -cpu host

Without VMX, UTSM gracefully falls back to the normal DSK boot flow.

Configuration Details

The utsm_x86_64_defconfig enables:

  • 64-bit kernel with SMP support
  • Serial console (8250/16550 at 0x3F8, 115200 baud)
  • virtio: console, block, net, fs (for UTSM host backends)
  • ext4, FAT, tmpfs, proc, sysfs filesystems
  • No module loading (all drivers built-in for Phase 1)
  • No EFI stub (UTSM uses custom VMX boot protocol)
  • Debug info and printk timestamps

File Structure

CODE/linux/
├── configs/
│   └── utsm_x86_64_defconfig   # Kernel configuration
├── patches/                     # UTSM-specific kernel patches
│   ├── utsm-hcall.patch         # /dev/utsm hypercall driver (Phase 1.3)
│   ├── utsm-ipc.patch           # Shared memory IPC driver (Phase 1.3)
│   └── utsm-virtio.patch        # virtio enhancements (Phase 1.4+)
├── initramfs/                   # Minimal initramfs contents (optional)
├── build.sh                     # Build script (run in WSL/Linux)
└── README.md                    # This file

Boot Flow

Limine (UEFI)
  → utsm.elf (VMX root)
    → vmm_init() + vmm_self_test()
    → linux_loader_init() (parse bzImage, set up boot_params, EPT)
    → linux_launch() (VMCS config + vmlaunch)
      → Linux 6.6 startup_64 (VMX non-root)
        → Serial console output
        → virtio-console ↔ UTSM
        → virtio-fs mount /utsm
        → User space (init/shell)