JakubGawron1 / bold

My os thingy

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BoldOS

Tested on Raspberry pi 3 on QEMU

Mix of:

  • https://github.com/cs140e/rpi3-rust-template
  • https://github.com/bztsrc/raspi3-tutorial
  • https://wiki.osdev.org/Raspberry_Pi_Bare_Bones
  • My ideas

Screenshot

Screenshot

Development environment (linux) - with GUI

  • Install dependencies:
    • apt install clang llvm binutils-aarch64-linux-gnu dosfstools mtools curl gdb-multiarch qemu-system-aarch64
  • Install rust:
    • curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      • (Default everything)
    • rustup component add rust-src
    • rustup override set nightly
  • Run it:
    • cargo run --release

Development environment (linux) - without GUI

  • Install dependencies:
    • apt install clang llvm binutils-aarch64-linux-gnu dosfstools mtools curl gdb-multiarch
    • apt install --no-install-recommends qemu-system-aarch64
  • Install rust:
    • curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      • (Default everything)
      • source $HOME/.cargo/env
    • rustup override set nightly
    • rustup component add rust-src
  • Run it:
    • cargo run --release -- -nographic -monitor none

Extra stuff

GDB

  • Run the kernel (either cargo run --release or cargo run-stopped)
  • ./scripts/gdb_attach.sh

Parsing exceptions

  • Copy the "ESR" value
  • Run parse_esr.py, and paste it in

Todo

  • Physical page allocator
  • Fixed virtual area for kernel data
  • Cooperative multi-tasking for kernel tasks
    • Naive executor
    • Async-ify FileInterface
    • Maybe Stream-ify FileInterface?
    • Proper executor
  • Read from SDHC card
  • Print kernel argv
  • Switch to EL1 from EL2
  • Enable paging for EL1
  • CI with Docker + GH actions
  • Dynamically sized virtual allocator for kernel data
    • Dynamically map pages and allocate page tables
  • Exception handling
  • Interrupts
    • UART1 interrupts
    • Timer interrupts
  • Multicore
    • Park cores properly
    • Execute tasks
  • Higher-half kernel
  • Make use of DTB
  • Parse tar initrd
  • Run code in EL0 (usermode)
  • Paging for usermode
  • FAT32 driver
  • IPC layer (basic)
  • VFS layer?
  • Structured Exception Handling
  • Simple Bluetooth
  • Power management for RPI3
  • USB
  • USB HID Keyboard
  • USB CDC Ethernet
  • Usermode ICMP ping utility

About

My os thingy

License:GNU General Public License v2.0


Languages

Language:Rust 97.4%Language:Python 0.9%Language:Shell 0.7%Language:C 0.7%Language:Dockerfile 0.2%Language:Perl 0.1%Language:Makefile 0.1%