- This OS started with following the tutorial of from Youtuber Poncho
- After finishing the tutorial, I have been trying to add USB compability. While improving on existing code's organization and efficiency.
- Poncho's Tutorial code Github Repo: https://github.com/Absurdponcho/PonchoOS
- current working code in on the dev branch
- bootloader -> prepare struct bootInfo
- kernel
- prepareKernel
- BasicRenderer
- GDT //Global Descriptor Table (sections of memory)
- Prepare memory
- PageFrameAllocator
- Reserve EFI Memory
- Lock Kernel Pages
- Lock Framebuffer
- replace EFI Virtual Memory (Page Map?)
- Prepare interrupts
- initialize heap (w/ page map)
- Handle ACPI (devices)
- get xsdt from rsdp
- use xsdt to get MCFG
- use MCFG to get all the devices
- prepareKernel
- Implement USB devices (keybaord)
- PCI -> Serial Bus
- get access to Serial Bus ids first
- figure out the outb and inb to interface with it
- notes
- qemu existing acpi tables
- FACP - The Fixed ACPI Description Table starts with the “FACP” signature.
- APIC - Application Policy Infrastructure Controller - Multiple APIC Description Table
- HPET - IA-PC High Precision Event Timer Table. See Links to ACPI-Related Documents under the heading “IA-PC High Precision Event Timer Table”.
- MCFG - PCI Express Memory-mapped Configuration Space base address description table. PCI Firmware Specification, Revision 3.0.
- WAET - Windows ACPI Emulated Devices Table**. See Links to ACPI-Related Documents under the heading “Windows ACPI Emulated Devices Table”.
- BGRT - Boot Graphics Resource Table
- qemu existing acpi tables
struct bootInfo {
framebuffer,
psf1-font,
EFI_MEMORY_MAP mMap,
mMapSize,
mMapDescSize,
RSDP, //Root System Descriptor Pointer
}
acronym | stands for |
---|---|
GDT | Global Descriptor Table |
EFI | Extensible Firmware Interface |
ACPI | Advanced Configuration and Power Interface |
RSDP | Root System Descriptor Pointer |
PCI | Peripheral Component Interconnect |
IDT | Interrupt Descriptor Table |
SDT | Service Descriptor Table |
MCFG | Memory Mapped Configuration Space Access (info about PCI configuration space base) |
LPC | Low Pin Count |
AHCI | Advanced Host Controller Interface (Protocal to communicate with Serial ATA(SATA) devices |
UPC | Unit Procedure Call |
USB SS | USB SuperSpeed |
USB CDC-ACM | USB Communications Device Class – Abstract Control Model |
BAR | Base Address Register |
SBRN | Serial Bus Release Bumber Register |
MMIO | Memory mapped I/O |
folder | sub-folder | what's inside |
---|---|---|
sys | boot | - kernelUtil - gdt - efiMemory |
memory | - memory - heap - paging - PageFrameAllocator - PageMapIndexer - PageTableManager |
|
storage | - ahci - |
|
time | - pit | |
interrupts | - IDT - interrupts - panic |
|
devices | - apci - IO - pci - pciDescriptors |
|
userinput | - kbScancodeTranslation - keyboard - mouse |
|
inc | - Bitmap - cstr - math |
|
graphics | - BasicRenderer - Framebuffer - simpleFonts |
|
- kernel.cpp |
- LoadGDT asm
- PCI Serial Bus
- cursorColor & layers
- update pci list/buffer devices