Refactor
This commit is contained in:
@@ -9,4 +9,4 @@ build-std-features = ["compiler-builtins-mem"]
|
|||||||
rustflags = [
|
rustflags = [
|
||||||
"-C", "link-arg=-Tilm.ld",
|
"-C", "link-arg=-Tilm.ld",
|
||||||
]
|
]
|
||||||
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"
|
runner = "just runner"
|
||||||
|
|||||||
8
.gdbinit
8
.gdbinit
@@ -1,6 +1,6 @@
|
|||||||
file target/riscv64/debug/kernel-rust
|
# file target/riscv64/debug/kernel-rust
|
||||||
target remote localhost:1234
|
target remote localhost:1234
|
||||||
break machine_mode_entry
|
# break machine_mode_entry
|
||||||
# break *0x800dd1d8
|
break *0x800bf000
|
||||||
# add-symbol-file target/riscv64/debug/test_pic 0x800dd1d8
|
add-symbol-file target/riscv64/debug/test_pic 0x800bf000
|
||||||
c
|
c
|
||||||
|
|||||||
20
justfile
20
justfile
@@ -1,18 +1,20 @@
|
|||||||
release := ""
|
release := ""
|
||||||
cargo_flags := if release != "" { "--release" } else { "" }
|
cargo_flags := if release != "" { "--release" } else { "" }
|
||||||
|
bin_path := if release != "" { "target/riscv64/release" } else { "target/riscv64/debug" }
|
||||||
|
|
||||||
default: run
|
default: run
|
||||||
|
|
||||||
mount_filesystem:
|
mount_filesystem:
|
||||||
# Add some permissions to be able to do next operations without sudo
|
@# Add some permissions to be able to do next operations without sudo
|
||||||
@mountpoint -q mnt || sudo mount -o umask=0022,gid=$(id -g $USER),uid=$(id -u $USER) disk.img mnt
|
mountpoint -q mnt || sudo mount -o umask=0022,gid=$(id -g $USER),uid=$(id -u $USER) disk.img mnt
|
||||||
|
|
||||||
sync_filesystem:
|
sync_filesystem:
|
||||||
sync
|
sync
|
||||||
|
|
||||||
build_user_prog prog:
|
build_user_prog prog:
|
||||||
RUSTFLAGS="-C relocation-model=pic -C link-arg=-Tuser.ld" cargo b {{ cargo_flags }} --package {{ prog }}
|
RUSTFLAGS="-C relocation-model=pic -C link-arg=-Tuser.ld" cargo b {{ cargo_flags }} --package {{ prog }}
|
||||||
riscv64-elf-objcopy -O binary {{ "target/riscv64/debug" / prog }} {{ "mnt/usr/bin" / prog }}
|
# cp {{ bin_path / prog }} {{ "mnt/usr/bin" / prog }}
|
||||||
|
riscv64-elf-objcopy -O binary {{ bin_path / prog }} {{ "mnt/usr/bin" / prog }}
|
||||||
|
|
||||||
build: mount_filesystem (map_dir "user" "build_user_prog")
|
build: mount_filesystem (map_dir "user" "build_user_prog")
|
||||||
cargo b {{ cargo_flags }}
|
cargo b {{ cargo_flags }}
|
||||||
@@ -25,3 +27,15 @@ map_dir dir recipe:
|
|||||||
@for file in `ls {{ dir }}`; do \
|
@for file in `ls {{ dir }}`; do \
|
||||||
just cargo_flags="{{ cargo_flags }}" {{ recipe }} $file ; \
|
just cargo_flags="{{ cargo_flags }}" {{ recipe }} $file ; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
qemu := "qemu-system-riscv64 -machine virt -device bochs-display -bios none -m 512M -device loader,file=disk.img,addr=0x90000000"
|
||||||
|
|
||||||
|
gdb: build
|
||||||
|
{{ qemu }} -s -S -kernel {{ bin_path / "kernel-rust" }}&
|
||||||
|
gf2
|
||||||
|
|
||||||
|
runner args:
|
||||||
|
{{ qemu }} -kernel {{ args }}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
cargo clean
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ impl Read for Disk {
|
|||||||
return Ok(0);
|
return Ok(0);
|
||||||
}
|
}
|
||||||
let size = usize::min(buf.len(), (self.size - self.pos) as usize);
|
let size = usize::min(buf.len(), (self.size - self.pos) as usize);
|
||||||
for i in 0..size {
|
(0..size).for_each(|i| {
|
||||||
buf[i] = unsafe { *DISK_ADDR.byte_add(i + self.pos as usize) };
|
buf[i] = unsafe { *DISK_ADDR.byte_add(i + self.pos as usize) };
|
||||||
}
|
});
|
||||||
self.pos += size as u64;
|
self.pos += size as u64;
|
||||||
Ok(size)
|
Ok(size)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,11 @@
|
|||||||
iter_map_windows,
|
iter_map_windows,
|
||||||
str_from_raw_parts,
|
str_from_raw_parts,
|
||||||
macro_metavar_expr,
|
macro_metavar_expr,
|
||||||
macro_metavar_expr_concat
|
macro_metavar_expr_concat,
|
||||||
|
ptr_metadata
|
||||||
)]
|
)]
|
||||||
|
|
||||||
|
use alloc::string::String;
|
||||||
use embedded_alloc::LlffHeap as Heap;
|
use embedded_alloc::LlffHeap as Heap;
|
||||||
use log::info;
|
use log::info;
|
||||||
|
|
||||||
@@ -42,7 +44,7 @@ mod uart;
|
|||||||
mod user;
|
mod user;
|
||||||
mod vga;
|
mod vga;
|
||||||
|
|
||||||
pub const HEAP_SIZE: usize = 1024 * 1024; // 1Mo RAM
|
pub const HEAP_SIZE: usize = 1024 * 1024 * 32; // 32Mo RAM
|
||||||
#[global_allocator]
|
#[global_allocator]
|
||||||
static HEAP: Heap = Heap::empty();
|
static HEAP: Heap = Heap::empty();
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ use shared::syscall::exit;
|
|||||||
use crate::{
|
use crate::{
|
||||||
fs::FILE_SYSTEM,
|
fs::FILE_SYSTEM,
|
||||||
println,
|
println,
|
||||||
scheduler::{ACTIVE_PID, PROCESS_COUNT, PROCESS_TABLE, scheduler_without_ret},
|
scheduler::{scheduler_without_ret, ACTIVE_PID, PROCESS_COUNT, PROCESS_TABLE},
|
||||||
time::elapsed_time_since_startup,
|
time::elapsed_time_since_startup,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -134,12 +134,9 @@ pub fn create_process_from_file<'a, T: Into<Path<'a>>>(path: T) -> i64 {
|
|||||||
|
|
||||||
println!("Loading binary at address: {:x?}", content.as_ptr());
|
println!("Loading binary at address: {:x?}", content.as_ptr());
|
||||||
|
|
||||||
// SAFETY: Convert raw bytes into an executable function.
|
// Fallback: treat the file as a raw binary blob and execute in-place
|
||||||
// The binary must be valid RISC-V machine code.
|
|
||||||
let entry_point =
|
let entry_point =
|
||||||
unsafe { core::mem::transmute::<*const u8, extern "C" fn()>(Vec::leak(content).as_ptr()) };
|
unsafe { core::mem::transmute::<*const u8, extern "C" fn()>(Vec::leak(content).as_ptr()) };
|
||||||
|
|
||||||
// Create a wrapper for the entry point function
|
|
||||||
let wrapper = Box::leak(Box::new(move || {
|
let wrapper = Box::leak(Box::new(move || {
|
||||||
entry_point();
|
entry_point();
|
||||||
}));
|
}));
|
||||||
|
|||||||
4
user.ld
4
user.ld
@@ -5,11 +5,11 @@ OUTPUT_ARCH(riscv)
|
|||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
|
|
||||||
MEMORY {
|
MEMORY {
|
||||||
RAM (wxa) : ORIGIN = 0x800dd1d8, LENGTH = 128M
|
RAM (wxa) : ORIGIN = 0x0, LENGTH = 128M
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTIONS {
|
SECTIONS {
|
||||||
. = 0x800dd1d8;
|
. = 0x0;
|
||||||
.text : {
|
.text : {
|
||||||
KEEP(*(.text._start))
|
KEEP(*(.text._start))
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ fn main() {
|
|||||||
test.push('C');
|
test.push('C');
|
||||||
}
|
}
|
||||||
let mut b = String::from("test");
|
let mut b = String::from("test");
|
||||||
|
b.write_str("string: uaeuieuei");
|
||||||
// (&mut b as &mut dyn Write).write_str("string: uaeuieuei");
|
// (&mut b as &mut dyn Write).write_str("string: uaeuieuei");
|
||||||
syscall::write_string_temp(&b);
|
syscall::write_string_temp(&b);
|
||||||
// write(&mut b, Arguments::from_str_nonconst("string: uaeuieuei"));
|
// write(&mut b, Arguments::from_str_nonconst("string: uaeuieuei"));
|
||||||
|
|||||||
Reference in New Issue
Block a user