Compare commits
No commits in common. "riscv" and "feat/main" have entirely different histories.
|
|
@ -4,7 +4,7 @@ extern "C" {
|
|||
fn cpuid() -> u64;
|
||||
fn consoleinit();
|
||||
fn printfinit();
|
||||
fn printf(msg: *const i8);
|
||||
// fn printf();
|
||||
fn kinit();
|
||||
fn kvminit();
|
||||
fn kvminithart();
|
||||
|
|
@ -27,9 +27,9 @@ pub unsafe fn kmain() {
|
|||
if cpuid() == 0 {
|
||||
consoleinit();
|
||||
printfinit();
|
||||
printf(c"\n".as_ptr());
|
||||
printf(c"xv6 kernel is booting\n".as_ptr());
|
||||
printf(c"\n".as_ptr());
|
||||
// printf("\n");
|
||||
// printf("xv6 kernel is booting\n");
|
||||
// printf("\n");
|
||||
kinit(); // physical page allocator
|
||||
kvminit(); // create kernel page table
|
||||
kvminithart(); // turn on paging
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
#![no_std]
|
||||
#![crate_type = "staticlib"]
|
||||
|
||||
use core::ffi::CStr;
|
||||
|
||||
pub mod kmain;
|
||||
pub mod memlayout;
|
||||
pub mod param;
|
||||
|
|
@ -13,16 +11,17 @@ pub mod uart;
|
|||
|
||||
extern "C" {
|
||||
// printf.c
|
||||
fn panic(s: *const i8);
|
||||
fn panic(s: *const u8);
|
||||
}
|
||||
|
||||
static PANIC_MSG: &CStr = c"!RUST PANIC!";
|
||||
/// '!RUST PANIC!\0'
|
||||
static PANIC_MSG: [u8; 13] = [33, 82, 85, 83, 84, 32, 80, 65, 78, 73, 67, 33, 0];
|
||||
|
||||
#[panic_handler]
|
||||
#[no_mangle]
|
||||
fn panic_handler(_info: &core::panic::PanicInfo) -> ! {
|
||||
unsafe {
|
||||
panic(PANIC_MSG.as_ptr());
|
||||
panic(core::ptr::addr_of!(PANIC_MSG[0]));
|
||||
}
|
||||
loop {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ pub struct SpinLock {
|
|||
// Is the lock held?
|
||||
pub locked: u32, // C boolean
|
||||
// For debugging:
|
||||
pub name: *const i8, // Name of lock.
|
||||
pub name: *const u8, // Name of lock.
|
||||
pub cpu: *mut (), // The cpu holding the lock.
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn initlock(lock: *mut SpinLock, name: *const i8) {
|
||||
pub unsafe extern "C" fn initlock(lock: *mut SpinLock, name: *const u8) {
|
||||
(*lock).name = name;
|
||||
(*lock).locked = 0;
|
||||
(*lock).cpu = null_mut();
|
||||
|
|
|
|||
|
|
@ -2,10 +2,7 @@ use crate::{
|
|||
memlayout::UART0,
|
||||
spinlock::{initlock, SpinLock},
|
||||
};
|
||||
use core::{
|
||||
ffi::CStr,
|
||||
ptr::{addr_of_mut, null, null_mut},
|
||||
};
|
||||
use core::ptr::{addr_of_mut, null, null_mut};
|
||||
|
||||
extern "C" {
|
||||
// spinlock.c
|
||||
|
|
@ -69,7 +66,8 @@ static mut uart_tx_lock: crate::spinlock::SpinLock = crate::spinlock::SpinLock {
|
|||
name: null(),
|
||||
};
|
||||
|
||||
static UART_LOCK_NAME: &CStr = c"uart";
|
||||
// NOTE: string 'uart\0' for c-implmentation of spinlock. Stupid but works.
|
||||
static UART_LOCK_NAME: [u8; 5] = [0x75, 0x61, 0x72, 0x74, 0];
|
||||
|
||||
const UART_TX_BUF_SIZE: usize = 32;
|
||||
static mut uart_tx_buf: [u8; UART_TX_BUF_SIZE] = [0; UART_TX_BUF_SIZE];
|
||||
|
|
|
|||
Loading…
Reference in New Issue