diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index d74249e..66cb3b2 100755 Binary files a/bootloader/rustsbi-qemu.bin and b/bootloader/rustsbi-qemu.bin differ diff --git a/os/run.sh b/os/run.sh new file mode 100755 index 0000000..f9e96d6 --- /dev/null +++ b/os/run.sh @@ -0,0 +1,9 @@ +qemu-system-riscv64 -M 128m -machine virt \ +-bios ../bootloader/rustsbi-qemu.bin \ +-device loader,file=target/riscv64gc-unknown-none-elf/release/os.bin,addr=0x80200000 \ +-drive file=../user/target/riscv64gc-unknown-none-elf/release/fs.img,if=none,format=raw,id=x0 \ +-device virtio-blk-device,drive=x0 \ +-device virtio-gpu-device \ +-device virtio-keyboard-device \ +-device virtio-mouse-device \ +-serial stdio diff --git a/os/src/boards/qemu.rs b/os/src/boards/qemu.rs index 19ec397..16dfb40 100644 --- a/os/src/boards/qemu.rs +++ b/os/src/boards/qemu.rs @@ -1,8 +1,8 @@ pub const CLOCK_FREQ: usize = 12500000; pub const MMIO: &[(usize, usize)] = &[ - (0x1000_0000, 0x1000), // VIRT_UART0 in virt machine - (0x1000_1000, 0x1000), // VIRT_VIRTIO in virt machine + (0x1000_0000, 0xa000), // VIRT_UART0 in virt machine + // (0x1000_1000, 0x9000), // VIRT_VIRTIO with GPU in virt machine (0x0C00_0000, 0x40_0000), // VIRT_PLIC in virt machine (0x0010_0000, 0x00_2000), // VIRT_TEST/RTC in virt machine ]; diff --git a/os/src/drivers/block/virtio_blk.rs b/os/src/drivers/block/virtio_blk.rs index 75e69c1..ff460d7 100644 --- a/os/src/drivers/block/virtio_blk.rs +++ b/os/src/drivers/block/virtio_blk.rs @@ -12,7 +12,7 @@ use lazy_static::*; use virtio_drivers::{BlkResp, RespStatus, VirtIOBlk, VirtIOHeader}; #[allow(unused)] -const VIRTIO0: usize = 0x10001000; +const VIRTIO0: usize = 0x10008000; pub struct VirtIOBlock { virtio_blk: UPIntrFreeCell>, diff --git a/os/src/main.rs b/os/src/main.rs index c4f096b..ff6cf3a 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -22,6 +22,7 @@ mod console; mod config; mod drivers; mod fs; +mod gui; mod lang_items; mod mm; mod sbi; @@ -30,7 +31,6 @@ mod syscall; mod task; mod timer; mod trap; -mod gui; core::arch::global_asm!(include_str!("entry.asm")); @@ -57,9 +57,13 @@ lazy_static! { pub fn rust_main() -> ! { clear_bss(); mm::init(); + println!("KERN: init gpu"); GPU_DEVICE.clone(); + println!("KERN: init keyboard"); KEYBOARD_DEVICE.clone(); + println!("KERN: init mouse"); MOUSE_DEVICE.clone(); + println!("KERN: init trap"); trap::init(); trap::enable_timer_interrupt(); timer::set_next_trigger();