Skip to content

Linux Driver Subsystem #19

@cl91

Description

@cl91

Eventual goal is to be able to run Linux driver in userspace. Device IO memory is mapped to driver address space and driver communicates with NTOS Executive Server via IO request packets (IRPs).

Tasks:

  • Project structure
  • Add ELF loading to NT Executive.
  • Build the smallest possible Linux as a library project (https://github.com/lkl/linux) and produce an ELF file vmlinuz.xdrv
  • Basic character device (/dev/null, /dev/zero)
  • Basic PCI device (pvpanic-pci)
  • Module loading
  • PCI ethernet driver --- goal is being able to send/recv ethernet frames. Done. Tested on e1000e (QEMU).
  • For networking to work we need io_uring-like async IO for NT #23 to multiplex the single instance of the Linux networking core. Basically afd.sys will link to the Linux networking core and instead of a real struct net_device, we have a proxy net_device which sends the packet via the IO ring between the networking core and the individual NIC driver (say e1000), which is in another driver process. This is also how we will implement communication (ie. sending URBs) between the USB host controller driver and individual USB device drivers. In other words, this is basically virtio, but more integrated with the rest of the system.
  • USB Host controller driver. EHCI (USB2.0) and xHCI (USB3.0) are main goals. We don't support UHCI(USB1.0) or OHCI (USB1.1), because we only support MSI/MSI-X interrupts for PCI devices. The idea is that for each USB device attached to the host controller, the HCI driver exposes a pair of IO rings, like in the networking case, for the USB device driver to submit URBs to the host controller.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions