diff --git a/.cargo/config.toml b/.cargo/config.toml index ce554d4..535da60 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -6,4 +6,4 @@ build-std = ["core", "compiler_builtins", "alloc"] build-std-features = ["compiler-builtins-mem"] [target.riscv64] -runner = "qemu-system-riscv64 -machine virt -device bochs-display -bios none -m 512M -device loader,file=/home/julien/ensimag/TPs/kernel/disk.img,addr=0x90000000 -s -S -kernel" +runner = "qemu-system-riscv64 -machine virt -device bochs-display -bios none -m 512M -device loader,file=/home/julien/ensimag/TPs/kernel/disk.img,addr=0x90000000 -kernel" diff --git a/.gitignore b/.gitignore index 5e32340..17c4a3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .helix **/target -Cargo.lock +**/Cargo.lock disk.img -out.mem +**/*.mem diff --git a/Cargo.toml b/Cargo.toml index 485655a..e0f18c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,8 @@ +cargo-features = ["profile-rustflags"] + [workspace] resolver = "3" -members = ["kernel", "test_pic"] +members = ["kernel", "user/*"] default-members = ["kernel"] [profile.dev] diff --git a/bffs/src/lib.rs b/bffs/src/lib.rs deleted file mode 100644 index f394512..0000000 --- a/bffs/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] - -const MAGIC_NUMBER: usize = 0xBFF5; diff --git a/bffs/Cargo.toml b/crates/bffs/Cargo.toml similarity index 100% rename from bffs/Cargo.toml rename to crates/bffs/Cargo.toml diff --git a/crates/bffs/src/lib.rs b/crates/bffs/src/lib.rs new file mode 100644 index 0000000..c859c38 --- /dev/null +++ b/crates/bffs/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] + +// const MAGIC_NUMBER: usize = 0xBFF5; diff --git a/kernel-macros/Cargo.toml b/crates/kernel-macros/Cargo.toml similarity index 100% rename from kernel-macros/Cargo.toml rename to crates/kernel-macros/Cargo.toml diff --git a/kernel-macros/src/image.rs b/crates/kernel-macros/src/image.rs similarity index 100% rename from kernel-macros/src/image.rs rename to crates/kernel-macros/src/image.rs diff --git a/kernel-macros/src/lib.rs b/crates/kernel-macros/src/lib.rs similarity index 100% rename from kernel-macros/src/lib.rs rename to crates/kernel-macros/src/lib.rs diff --git a/justfile b/justfile new file mode 100644 index 0000000..a1981e6 --- /dev/null +++ b/justfile @@ -0,0 +1,20 @@ +release := "" +cargo_flags := if release != "" { "--release" } else { "" } + +default: run + +build_user_prog prog: + cd {{ "user" / prog }} && \ + RUSTFLAGS="-C relocation-model=pic" cargo b {{ cargo_flags }} + riscv64-elf-objcopy -O binary {{ "target/riscv64/debug" / prog }} {{ "user" / prog / prog + ".mem" }} + +build: (map_dir "user" "build_user_prog") + cargo b {{ cargo_flags }} + +run: build + cargo r {{ cargo_flags }} --bin kernel-rust + +map_dir dir recipe: + @for file in `ls {{ dir }}`; do \ + just cargo_flags={{ cargo_flags }} {{ recipe }} $file ; \ + done diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index fa67d50..43ed44c 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" [dependencies] embedded-alloc = "0.7" -kernel-macros = { path = "../kernel-macros" } +kernel-macros = { path = "../crates/kernel-macros" } log = "0.4" critical-section = { version = "1", features = ["restore-state-bool"] } -bffs = { path = "../bffs" } +bffs = { path = "../crates/bffs" } diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 6288e88..d9480d6 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -53,7 +53,6 @@ pub extern "C" fn supervisor_mode_entry() { init_log().unwrap(); Vga::init(); scheduler_init(); - // enable_supervisor_interrupt(); } info!("Hello World !"); @@ -62,7 +61,7 @@ pub extern "C" fn supervisor_mode_entry() { create_process(test, "proc1"); create_process(proc2, "proc2"); - // MemoryDisk::new(); + MemoryDisk::test(); enable_supervisor_interrupt(); idle(); diff --git a/kernel/src/tests_fat.rs b/kernel/src/tests_fat.rs index 4f87839..e701eef 100644 --- a/kernel/src/tests_fat.rs +++ b/kernel/src/tests_fat.rs @@ -2,12 +2,11 @@ use core::str; use log::info; const DISK_ADDR: usize = 0x9000_0000; -const DISK_SIZE: usize = 16 * 1024 * 1024; // 16MB pub struct MemoryDisk {} impl MemoryDisk { - pub fn new() { + pub fn test() { let test = unsafe { str::from_raw_parts(DISK_ADDR as *const u8, 13) }; info!("{}", test); } diff --git a/kernel/src/user.rs b/kernel/src/user.rs index 884812a..53f08c4 100644 --- a/kernel/src/user.rs +++ b/kernel/src/user.rs @@ -1,13 +1,11 @@ -use core::{arch::asm, time::Duration}; - -use log::info; +use core::time::Duration; use crate::syscall::{sleep, write_int_temp, write_string_temp}; #[repr(align(32))] -struct Alignement([u8; 132]); +struct Alignement([u8; 136]); -static PROG: Alignement = Alignement(*include_bytes!("../../out.mem")); +static PROG: Alignement = Alignement(*include_bytes!("../../user/test_pic/test_pic.mem")); pub fn test() { write_int_temp(PROG.0.as_ptr() as u64); diff --git a/test_pic/Cargo.toml b/user/test_pic/Cargo.toml similarity index 100% rename from test_pic/Cargo.toml rename to user/test_pic/Cargo.toml diff --git a/test_pic/build.rs b/user/test_pic/build.rs similarity index 100% rename from test_pic/build.rs rename to user/test_pic/build.rs diff --git a/test_pic/src/main.rs b/user/test_pic/src/main.rs similarity index 90% rename from test_pic/src/main.rs rename to user/test_pic/src/main.rs index 00cdcd3..dc361d9 100644 --- a/test_pic/src/main.rs +++ b/user/test_pic/src/main.rs @@ -1,8 +1,6 @@ #![no_std] #![no_main] -use core::arch::global_asm; - #[panic_handler] fn panic(_panic_info: &core::panic::PanicInfo) -> ! { loop {} @@ -20,5 +18,4 @@ pub extern "C" fn entry() { clobber_abi("system") ); } - loop {} }