Phase B (Core Device Support) — all drivers verified in QEMU: - Network: virtio-net cleanup, RTL8139, E1000, clause-22 MDIO PHY management, CAN bus, industrial protocols (Modbus/Profibus/EtherCAT), controller probe+dispatch - Block storage: RAM disk backend (write->read->verify PASSED), virtio-blk transport, backend dispatch, real MBR+GPT partition parsers, SD/eMMC command framework - GPIO: PL061 (verified), I2C: DesignWare (verified), SPI: PL022 (verified) Phase C (Advanced Features): - PCI: FULL PikeOS ARMv7 replica — transport-agnostic uos_pci_ops, config-address encoding, BAR sizing, capability walk, enumeration+bridge recursion, MSI/MSI-X - USB: PikeOS-style layered stack — usb.h contract, usb_core.cpp (enumeration state machine), usb_ehci.cpp (EHCI transport) - Display: FULL 1:1 PikeOS fbcon replica + copied font_8x16 Build foundation fixes: - Freestanding aeabi_runtime.cpp (__aeabi_uidiv/__aeabi_uldivmod) - PikeOS-style flat 4GB MMU section map + proper enable (unblocked device MMIO) - guest.h MAX_GUEST_IMAGE_SIZE 256MB->16MB (BSS was 259MB) - C/C++ linkage fixes, duplicate-virtio_net_init, MMIO access-size handling Phase D (PikeOS ARMv7 Microkernel Port): - D-1: Per-VM address spaces — cloned pgdirs, ASID-tagged TLB, 4K page walker, isolation PASSED (two guests, same VA->different PAs), guest fault recovery - D-2: IRQ dispatch backbone — 1024-slot dispatch table, real GICv2 hardware (GICD_CTLR/GICC_CTLR/GICC_PMR/GICC_IAR/GICC_EOIR), arm_irq_handler wired - D-3: Time subsystem — CNTVCT ns-since-boot, CNTP periodic ticker via D-2 - D-4: KDEV framework — linker-section driver registration, uos_kdev_init_all, name lookup - D-5: VFP/NEON — lazy enable (undef trap->CPACR+FPEXC.EN), FPEXC=0x40000000 - D-6: SMP — per-CPU state, MPIDR, IPI/SGI framework (reschedule+TLB flush) All uos_ naming (PikeOS p4_ convention adapted). Compiles -Werror freestanding C++17. Co-Authored-By: Claude <noreply@anthropic.com>
45 lines
751 B
Text
45 lines
751 B
Text
/*
|
|
* Universalisos linker script for QEMU ARM virt machine.
|
|
*
|
|
* QEMU loads the raw kernel image at the start of RAM (0x40000000)
|
|
* when using -kernel.
|
|
*/
|
|
|
|
ENTRY(_start)
|
|
|
|
SECTIONS
|
|
{
|
|
. = 0x40000000;
|
|
|
|
.text : {
|
|
*(.text.boot)
|
|
*(.text .text.*)
|
|
}
|
|
|
|
.rodata : {
|
|
*(.rodata .rodata.*)
|
|
}
|
|
|
|
.data : {
|
|
*(.data .data.*)
|
|
}
|
|
|
|
.uos_drv : {
|
|
__uos_drv_start = .;
|
|
KEEP(*(.uos_drv))
|
|
__uos_drv_end = .;
|
|
}
|
|
|
|
.bss : {
|
|
_bss_start = .;
|
|
*(.bss .bss.*)
|
|
*(COMMON)
|
|
_bss_end = .;
|
|
}
|
|
|
|
/* 64 KiB boot stack placed immediately after BSS, 8-byte aligned. */
|
|
_stack_bottom = .;
|
|
. = ALIGN(8);
|
|
. = . + 0x10000;
|
|
_stack_top = ALIGN(8);
|
|
}
|