Files
Deshab-OS/CODE/linux
Linehu 38ff3cf93c feat: FS-E strict filesystem mode - ext4 rw driver, FAT32 big-disk fix, forced re-login
- CODE/dsk/ext4.c: minimal full ext4 read/write (GPT probe, feature gate,
  extent depth 0/1 rw, block/inode alloc-free, dir insert, write-verify);
  boot selftest PASS on p2. Unsupported features panic (FS-E2x), zero fallback.
- DSK fat32 write: on-demand FAT entry RMW + chunked free-cluster scan
  (fixes "no free clusters" on 5.3G ESP); rec_len shrink offset (+4) and
  chunk alignment fixes. USER.CONF write-verify ok, firstInit flip ok.
- First-boot: wizard -> persist -> forced login (FS-E06 if skipped/failed)
  -> desktop. login.elf loaded via system/user/use fallback.
- FirstInit network page: Connect now panics NET-E01 (no wlan stack);
  Save (config only) is the only path forward.
- FirstInit/DSK fatal: ohMyLogo lotus fatal screen (NET-E01 / FS-E series).
- Boot screen: Logo.png image removed, "DESHAB P01" text centered only;
  dcp/xj logos regenerated from TEXTURES/.
- run_qemu.bat: main GPT image on SATA ide.0 (AHCI provider must see ext4).
2026-10-02 23:49:05 +08:00
..
2026-08-09 22:20:01 +08:00
2026-07-31 13:53:49 +08:00
2026-07-28 21:11:10 +08:00
2026-07-28 21:11:10 +08:00
2026-07-28 21:11:10 +08:00
2026-07-31 13:53:49 +08:00

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)

Guest Networking (virtio-net)

UTSM vmm 侧模拟一块 virtio-net 网卡(virtio-mmio 模型,GPA 0xF4001000, guest ISA IRQ6),数据路径桥接到 host 真实网卡(e1000/virtio-net DKM 驱动, 经 kernel_api.net 的 tx/rx_poll 收发帧)。guest 内核 cmdline 已自动注入:

virtio_mmio.device=4K@0xF4001000:6

utsm_x86_64_defconfig 已启用 CONFIG_VIRTIO_NET=y(内置,非模块), 内核启动后应出现 eth0(virtio-mmio 无 PCI 拓扑,网卡名固定为 eth0):

# 确认网卡已识别(dmesg 应能看到 virtio_net  probe 日志)
ip link show

# 拉起接口
ip link set eth0 up

# 方式一:DHCP(QEMU user-net/slirp 环境,网关 10.0.2.2,DNS 10.0.2.3)
dhcpcd eth0
# 或:dhclient eth0

# 方式二:静态地址(无 DHCP 服务器时)
ip addr add 10.0.2.15/24 dev eth0
ip route add default via 10.0.2.2
echo "nameserver 10.0.2.3" > /etc/resolv.conf

# 验证连通性
ping -c3 10.0.2.2        # QEMU slirp 网关(永远在线,适合冒烟测试)
ping -c3 10.0.2.3        # slirp 内建 DNS
pacman -Sy               # 联网同步包数据库

注意事项:

  • MAC 共用:guest virtio-net 的 MAC 与 host e1000 相同(UTSM 桥接模型, config 空间直接回填 host 网卡 MAC)。QEMU user-net 下 slirp 按 MAC 分配 10.0.2.15;若 host Deshab 原生网络栈同时用该网卡联网,两者会抢同一 DHCP 租约,实测时请只让一侧做 DHCP(或 host 完全不用网络)。
  • MTU:后端按标准 1500 MTU 转发,不支持 GSO/TSO(feature 未协商, guest 自动走软件分片/checksum 路径)。
  • 无中断收包:RX 走 UTSM 周期轮询(VMX preemption timer,~1kHz) 填充 guest RX ring 并注入 IRQ6;大流量下串口统计日志每 512 帧打印一行 [VNET] stat ...(rx_filled / rx_drop_nobuf / tx_sent / tx_drop), 可用于判断包在哪一段丢失。
  • 若 ip link 看不到 eth0:检查 dmesg 中 virtio_mmio probe 是否成功, 以及 host 串口日志是否有 [VNET] bound to UTSM net device 0 (host 侧 e1000/virtio-net DKM 驱动需先注册 netdev)。