fix qemu-arm64 run error
This commit is contained in:
@@ -35,7 +35,7 @@ pub unsafe fn init_early(dtb_base: usize, dtb_size: usize) {
|
||||
let virt = crate::PHYS_OFFSET + phys;
|
||||
{
|
||||
let mut serial_port = SerialPort::new(virt);
|
||||
//serial_port.init(false);
|
||||
serial_port.init(false);
|
||||
*COM1.lock() = Some(serial_port);
|
||||
}
|
||||
println!("UART at {:X}", virt);
|
||||
@@ -43,12 +43,10 @@ pub unsafe fn init_early(dtb_base: usize, dtb_size: usize) {
|
||||
}
|
||||
|
||||
pub unsafe fn init() {
|
||||
println!("test 1");
|
||||
if let Some(ref mut serial_port) = *COM1.lock() {
|
||||
serial_port.receive();
|
||||
//serial_port.init(true);
|
||||
serial_port.init(true);
|
||||
}
|
||||
println!("test 2");
|
||||
let data = DTB_BINARY.get().unwrap();
|
||||
let fdt = fdt::DeviceTree::new(data).unwrap();
|
||||
if let Some(node) = find_compatible_node(&fdt, "arm,pl011") {
|
||||
|
||||
@@ -126,6 +126,14 @@ unsafe fn instr_trapped_msr_mrs_inner(stack: &mut InterruptStack, from_user: boo
|
||||
exception_stack!(synchronous_exception_at_el1_with_spx, |stack| {
|
||||
if !pf_inner(stack, exception_code(stack.iret.esr_el1), "sync_exc_el1_spx") {
|
||||
println!("Synchronous exception at EL1 with SPx");
|
||||
if exception_code(stack.iret.esr_el1) == 0b100101 {
|
||||
let far_el1 = far_el1();
|
||||
println!("FAR_EL1 = 0x{:08x}", far_el1);
|
||||
}
|
||||
else if exception_code(stack.iret.esr_el1) == 0b100100 {
|
||||
let far_el1 = far_el1();
|
||||
println!("USER FAR_EL1 = 0x{:08x}", far_el1);
|
||||
}
|
||||
stack.dump();
|
||||
stack_trace();
|
||||
loop {}
|
||||
|
||||
@@ -9,7 +9,6 @@ pub struct IrqDesc {
|
||||
|
||||
exception_stack!(irq_at_el0, |stack| {
|
||||
let irq = IRQ_CHIP.irq_ack();
|
||||
//println!("el0 irq num {}", irq);
|
||||
if let Some(virq) = IRQ_CHIP.irq_to_virq(irq) && virq < 1024 {
|
||||
if let Some(handler) = &mut IRQ_CHIP.irq_desc[virq].handler {
|
||||
handler.irq_handler(virq as u32);
|
||||
@@ -23,7 +22,6 @@ exception_stack!(irq_at_el0, |stack| {
|
||||
|
||||
exception_stack!(irq_at_el1, |stack| {
|
||||
let irq = IRQ_CHIP.irq_ack();
|
||||
//println!("el1 irq num {}", irq);
|
||||
if let Some(virq) = IRQ_CHIP.irq_to_virq(irq) && virq < 1024 {
|
||||
if let Some(handler) = &mut IRQ_CHIP.irq_desc[virq].handler {
|
||||
handler.irq_handler(virq as u32);
|
||||
|
||||
@@ -76,7 +76,7 @@ pub unsafe extern "C" fn kstart(args_ptr: *const KernelArgs) -> ! {
|
||||
KERNEL_SIZE.store(args.kernel_size, Ordering::SeqCst);
|
||||
|
||||
// Convert env to slice
|
||||
let env = slice::from_raw_parts((args.env_base) as *const u8, args.env_size);
|
||||
let env = slice::from_raw_parts((crate::PHYS_OFFSET + args.env_base) as *const u8, args.env_size);
|
||||
|
||||
// Set up graphical debug
|
||||
#[cfg(feature = "graphical_debug")]
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ pub extern fn irq_trigger(irq: u8) {
|
||||
event::trigger(*scheme_id, *fd, EVENT_READ);
|
||||
}
|
||||
} else {
|
||||
println!("Calling IRQ without triggering");
|
||||
println!("Calling IRQ without triggering {}", irq);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user