Change io crate & add a small shell

This commit is contained in:
2026-03-25 20:45:11 +01:00
parent f966a1239e
commit ae0593c972
98 changed files with 11102 additions and 810 deletions

View File

@@ -5,7 +5,7 @@
#![no_std]
#![no_main]
// #![warn(clippy::pedantic)]
#![allow(static_mut_refs)]
#![allow(static_mut_refs, internal_features)]
#![feature(
riscv_ext_intrinsics,
str_from_raw_parts,
@@ -13,14 +13,13 @@
derive_const,
const_cmp,
const_trait_impl,
trait_alias
trait_alias,
prelude_import,
slice_index_methods
)]
use core::sync::atomic::AtomicBool;
use alloc::boxed::Box;
use embedded_alloc::LlffHeap as Heap;
use log::info;
use crate::{
drivers::{keyboard::KBD_DRIVER, mouse::MOUSE_DRIVER},
@@ -28,12 +27,16 @@ use crate::{
pci::scan_virtio_devices,
riscv::enable_supervisor_interrupt,
scheduler::{SCHEDULER, idle},
user::{proc2, test},
vga::Vga,
virtio::input::init_plic_pci,
virtual_fs::init_file_system,
};
mod prelude;
#[allow(unused_imports)]
#[prelude_import]
pub use prelude::*;
extern crate alloc;
mod boot;
mod critical_section;
@@ -55,7 +58,6 @@ mod syscall;
mod time;
mod tty;
mod uart;
mod user;
mod vga;
mod virtio;
mod virtual_console;
@@ -83,23 +85,6 @@ pub extern "C" fn supervisor_mode_entry() {
SCHEDULER.lock().init();
}
info!("Hello World !");
// unsafe { Vga.draw_string(10, 10, "Hello World !", Color::WHITE, Color::BLACK) };
// let binding = Box::leak(Box::new(["coucou".as_bytes()]));
SCHEDULER
.lock()
.create_process(Box::new(test), "proc1", 0, core::ptr::null());
SCHEDULER
.lock()
.create_process(Box::new(proc2), "proc2", 0, core::ptr::null());
SCHEDULER
.lock()
.create_process_from_file("/usr/bin/test_pic", 0, core::ptr::null());
enable_supervisor_interrupt();
unsafe {
let (pci_keyboard, pci_mouse) = scan_virtio_devices();
let (pci_keyboard, pci_mouse) = (pci_keyboard.unwrap(), pci_mouse.unwrap());
@@ -121,5 +106,11 @@ pub extern "C" fn supervisor_mode_entry() {
init_plic_pci(pci_keyboard.irq);
init_plic_pci(pci_mouse.irq);
}
SCHEDULER
.lock()
.create_process_from_file("/usr/bin/agetty", 0, core::ptr::null());
enable_supervisor_interrupt();
idle(0, core::ptr::null());
}