From bcc6a107638039fa853938079008634d5d787a8a Mon Sep 17 00:00:00 2001 From: Able Date: Sat, 27 Nov 2021 09:19:08 -0600 Subject: [PATCH] work being done on simplification --- {ableos/.vscode => .vscode}/settings.json | 0 ableos/Cargo.lock | 7 ++++ ableos/Cargo.toml | 1 + ableos/src/allocator/aalloc.rs | 18 +++++++++ ableos/src/allocator/mod.rs | 4 +- .../aarch64/drivers/allocator.rs} | 0 ableos/src/arch/aarch64/drivers/mod.rs | 1 + ableos/src/arch/riscv/drivers/allocator.rs | 14 +++++++ ableos/src/arch/riscv/drivers/mod.rs | 1 + ableos/src/arch/riscv/drivers/serial.rs | 1 + ableos/src/arch/riscv/mod.rs | 8 ++-- ableos/src/arch/x86_64/mod.rs | 3 ++ ableos/src/kmain.rs | 14 ++----- ableos/src/lib.rs | 9 ++--- ableos/src/log.rs | 38 +++++++++++++++++++ ableos/src/print.rs | 8 ++++ ableos/src/relib/math/rand/mod.rs | 1 - ableos/src/serial.rs | 0 18 files changed, 104 insertions(+), 24 deletions(-) rename {ableos/.vscode => .vscode}/settings.json (100%) create mode 100644 ableos/src/allocator/aalloc.rs rename ableos/src/{allocator/dummy.rs => arch/aarch64/drivers/allocator.rs} (100%) create mode 100644 ableos/src/arch/riscv/drivers/allocator.rs create mode 100644 ableos/src/log.rs delete mode 100644 ableos/src/serial.rs diff --git a/ableos/.vscode/settings.json b/.vscode/settings.json similarity index 100% rename from ableos/.vscode/settings.json rename to .vscode/settings.json diff --git a/ableos/Cargo.lock b/ableos/Cargo.lock index 9d9bb0f..25e01df 100644 --- a/ableos/Cargo.lock +++ b/ableos/Cargo.lock @@ -10,6 +10,7 @@ dependencies = [ "cpuio", "lazy_static", "linked_list_allocator", + "lliw", "pic8259", "psp", "spin", @@ -70,6 +71,12 @@ dependencies = [ "spinning_top", ] +[[package]] +name = "lliw" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d502c8bcc35a4f7ca9a7ffb7ac27b15ba30b1b92c2d69a1e4437e2635d73af7" + [[package]] name = "lock_api" version = "0.4.5" diff --git a/ableos/Cargo.toml b/ableos/Cargo.toml index 3c8038a..5996595 100644 --- a/ableos/Cargo.toml +++ b/ableos/Cargo.toml @@ -16,6 +16,7 @@ run-args=["-serial", "stdio"] [dependencies] spin = "0.5.2" linked_list_allocator = "0.9.0" +lliw = "0.2.0" [dependencies.lazy_static] features = ["spin_no_std"] diff --git a/ableos/src/allocator/aalloc.rs b/ableos/src/allocator/aalloc.rs new file mode 100644 index 0000000..652c74a --- /dev/null +++ b/ableos/src/allocator/aalloc.rs @@ -0,0 +1,18 @@ +/*! +The allocator to be implemented by ableOS +*/ + +use alloc::alloc::{GlobalAlloc, Layout}; +use core::ptr::null_mut; + +pub struct AAloc; + +unsafe impl GlobalAlloc for AAloc { + unsafe fn alloc(&self, _layout: Layout) -> *mut u8 { + null_mut() + } + + unsafe fn dealloc(&self, _ptr: *mut u8, _layout: Layout) { + panic!("dealloc should be never called") + } +} diff --git a/ableos/src/allocator/mod.rs b/ableos/src/allocator/mod.rs index 8b2d79a..22f9661 100644 --- a/ableos/src/allocator/mod.rs +++ b/ableos/src/allocator/mod.rs @@ -1,8 +1,6 @@ use alloc::alloc::{GlobalAlloc, Layout}; -// use core::alloc::{GlobalAlloc, Layout}; -use core::ptr::null_mut; -// mod dummy; +mod aalloc; // use dummy::Dummy; pub const HEAP_START: usize = 0x_4444_4444_0000; diff --git a/ableos/src/allocator/dummy.rs b/ableos/src/arch/aarch64/drivers/allocator.rs similarity index 100% rename from ableos/src/allocator/dummy.rs rename to ableos/src/arch/aarch64/drivers/allocator.rs diff --git a/ableos/src/arch/aarch64/drivers/mod.rs b/ableos/src/arch/aarch64/drivers/mod.rs index 5111e65..e2e6ab6 100644 --- a/ableos/src/arch/aarch64/drivers/mod.rs +++ b/ableos/src/arch/aarch64/drivers/mod.rs @@ -1,3 +1,4 @@ +pub mod allocator; pub mod graphics; pub mod nrf52; pub mod serial; diff --git a/ableos/src/arch/riscv/drivers/allocator.rs b/ableos/src/arch/riscv/drivers/allocator.rs new file mode 100644 index 0000000..7b5f9d5 --- /dev/null +++ b/ableos/src/arch/riscv/drivers/allocator.rs @@ -0,0 +1,14 @@ +use alloc::alloc::{GlobalAlloc, Layout}; +use core::ptr::null_mut; + +pub struct Dummy; + +unsafe impl GlobalAlloc for Dummy { + unsafe fn alloc(&self, _layout: Layout) -> *mut u8 { + null_mut() + } + + unsafe fn dealloc(&self, _ptr: *mut u8, _layout: Layout) { + panic!("dealloc should be never called") + } +} diff --git a/ableos/src/arch/riscv/drivers/mod.rs b/ableos/src/arch/riscv/drivers/mod.rs index b832ebf..0060597 100644 --- a/ableos/src/arch/riscv/drivers/mod.rs +++ b/ableos/src/arch/riscv/drivers/mod.rs @@ -1,2 +1,3 @@ +pub mod allocator; pub mod graphics; pub mod serial; diff --git a/ableos/src/arch/riscv/drivers/serial.rs b/ableos/src/arch/riscv/drivers/serial.rs index fad37ed..42ae31d 100644 --- a/ableos/src/arch/riscv/drivers/serial.rs +++ b/ableos/src/arch/riscv/drivers/serial.rs @@ -30,6 +30,7 @@ impl Serial123 { use spin::Mutex; use lazy_static::lazy_static; + lazy_static! { pub static ref SERIAL: Mutex = { let serial_port = Serial123 { diff --git a/ableos/src/arch/riscv/mod.rs b/ableos/src/arch/riscv/mod.rs index 7d850fd..919f759 100644 --- a/ableos/src/arch/riscv/mod.rs +++ b/ableos/src/arch/riscv/mod.rs @@ -30,10 +30,12 @@ unsafe extern "C" fn _boot() -> ! { sym _start, options(noreturn)); } -use crate::serial::SERIAL; - extern "C" fn _start() -> ! { - SERIAL.lock().out(format_args!("Hi")); + let uart_data = 0x10000000 as *mut u8; + for c in b"Hardcoded serial output\n" { + unsafe { uart_data.write_volatile(*c) }; + } + sloop() } diff --git a/ableos/src/arch/x86_64/mod.rs b/ableos/src/arch/x86_64/mod.rs index 79a63a4..c5059c2 100644 --- a/ableos/src/arch/x86_64/mod.rs +++ b/ableos/src/arch/x86_64/mod.rs @@ -45,9 +45,12 @@ pub fn sloop() -> ! { hlt(); } } + +/* #[cfg(test)] pub fn test_runner(tests: &[&dyn Fn()]) { for test in tests { test(); } } +*/ diff --git a/ableos/src/kmain.rs b/ableos/src/kmain.rs index 3bed61f..3cd0504 100644 --- a/ableos/src/kmain.rs +++ b/ableos/src/kmain.rs @@ -1,16 +1,10 @@ #![allow(clippy::empty_loop)] use crate::{ - arch::{ - drivers::graphics::GraphicsBuffer, - init, - memory::{self, translate_addr}, - sloop, - }, - driver_traits::{graphics::Graphics, serial::Serial}, + arch::{drivers::graphics::GraphicsBuffer, init, sloop}, + driver_traits::graphics::Graphics, experiments::systeminfo::{KERNEL_VERSION, RELEASE_TYPE}, keyboard::DecodedKey, - relib::math::rand::{linearshift::LinearShiftRegister, prand::PRand, RAND_HANDLE, RNG}, - serial_print, serial_println, + relib::math::rand::{RAND_HANDLE, RNG}, }; use lazy_static::lazy_static; @@ -65,14 +59,12 @@ pub fn kernel_main() -> ! { } lazy_static! { - // TODO: should have a sin wave influence contribution to entropy pub static ref TICK: spin::Mutex = spin::Mutex::new(0); } /// called by arch specific timers to tick up all kernel related functions pub fn tick() { let mut data = TICK.lock(); *data += 1; - // serial_println!("{}", *data); RAND_HANDLE.lock().seed_entropy_timer(*data); } diff --git a/ableos/src/lib.rs b/ableos/src/lib.rs index fcd7c4f..08b62f0 100644 --- a/ableos/src/lib.rs +++ b/ableos/src/lib.rs @@ -4,6 +4,7 @@ #![feature( abi_x86_interrupt, asm, + asm_sym, alloc_error_handler, core_intrinsics, global_asm, @@ -27,16 +28,12 @@ pub mod arch; #[macro_use] pub mod print; -use arch::drivers::serial; +pub mod allocator; pub mod driver_traits; pub mod experiments; pub mod keyboard; pub mod kmain; +pub mod log; pub mod panic; pub mod relib; - -use experiments::server; - extern crate alloc; - -pub mod allocator; diff --git a/ableos/src/log.rs b/ableos/src/log.rs new file mode 100644 index 0000000..7422266 --- /dev/null +++ b/ableos/src/log.rs @@ -0,0 +1,38 @@ +pub trait Log { + fn debug(); + fn error(); + fn log(); + fn trace(); +} + +use crate::serial_print; +use lliw::{Bg, Fg, Reset, Style}; +pub struct ANSISerialLogger; +impl Log for ANSISerialLogger { + fn debug() { + // serial_print!("[{}Debug{}]",); + + serial_print!( + "{}{}Attention!{}{} You have {}{}1{}{} new message", + Style::Underline, + Fg::Yellow, + Style::NoUnderline, + Fg::Reset, + Bg::White, + Fg::Black, + Bg::Reset, + Fg::Reset, + ); + + todo!(); + } + fn error() { + todo!(); + } + fn log() { + todo!(); + } + fn trace() { + todo!(); + } +} diff --git a/ableos/src/print.rs b/ableos/src/print.rs index 26545b2..76a2013 100644 --- a/ableos/src/print.rs +++ b/ableos/src/print.rs @@ -25,6 +25,14 @@ impl core::fmt::Write for Stdout { fn write_str(&mut self, s: &str) -> Result<(), Error> { Ok(()) } + + fn write_char(&mut self, c: char) -> core::fmt::Result { + self.write_str(c.encode_utf8(&mut [0; 4])) + } + + fn write_fmt(mut self: &mut Self, args: Arguments<'_>) -> core::fmt::Result { + core::fmt::write(&mut self, args) + } } #[macro_export] macro_rules! print { diff --git a/ableos/src/relib/math/rand/mod.rs b/ableos/src/relib/math/rand/mod.rs index fe50604..4617a4f 100644 --- a/ableos/src/relib/math/rand/mod.rs +++ b/ableos/src/relib/math/rand/mod.rs @@ -54,7 +54,6 @@ impl RandomHandeler { self.linearshift .seed(self.entropy.pool[self.entropy.pool_index as usize]); } - // FIXME: Likely to panic pub fn seed_entropy_keyboard(&mut self, key: u8) { self.entropy.pool_index += key; diff --git a/ableos/src/serial.rs b/ableos/src/serial.rs deleted file mode 100644 index e69de29..0000000