mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-20 18:26:32 +00:00
feat: 支持在rv64下,运行rust编写的helloworld程序 (#1125)
* 添加 riscv_rust_init 这个helloworld程序 Signed-off-by: longjin <longjin@DragonOS.org> * feat: 支持在riscv下启动rust编写的hello world程序 TODO: 支持sys ppoll Signed-off-by: longjin <longjin@DragonOS.org> * chore: 更新构建容器版本至v1.9 Signed-off-by: longjin <longjin@DragonOS.org> * 1 --------- Signed-off-by: longjin <longjin@DragonOS.org>
This commit is contained in:
2
kernel/Cargo.lock
generated
2
kernel/Cargo.lock
generated
@ -1839,7 +1839,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
||||
[[package]]
|
||||
name = "virtio-drivers"
|
||||
version = "0.7.2"
|
||||
source = "git+https://git.mirrors.dragonos.org.cn/DragonOS-Community/virtio-drivers?rev=f91c807965#f91c8079658dbc7cc230bf041325b94a0ab2e301"
|
||||
source = "git+https://git.mirrors.dragonos.org.cn/DragonOS-Community/virtio-drivers?rev=415ab38ff9#415ab38ff99f3c8e150269c04f65d684ba9d1365"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
"log",
|
||||
|
@ -151,10 +151,18 @@ fn do_trap_insn_page_fault(trap_frame: &mut TrapFrame) -> Result<(), SystemError
|
||||
let vaddr = trap_frame.badaddr;
|
||||
let cause = trap_frame.cause;
|
||||
let epc = trap_frame.epc;
|
||||
error!(
|
||||
"riscv64_do_irq: do_insn_page_fault vaddr: {:#x}, cause: {:?} epc: {:#x}",
|
||||
vaddr, cause, epc
|
||||
);
|
||||
if trap_frame.is_from_user() {
|
||||
error!(
|
||||
"riscv64_do_irq: do_trap_insn_page_fault(user mode): epc: {epc:#x}, vaddr={:#x}, cause={:?}",
|
||||
vaddr, cause
|
||||
);
|
||||
} else {
|
||||
panic!(
|
||||
"riscv64_do_irq: do_trap_insn_page_fault(kernel mode): epc: {epc:#x}, vaddr={:#x}, cause={:?}",
|
||||
vaddr, cause
|
||||
);
|
||||
}
|
||||
|
||||
loop {
|
||||
spin_loop();
|
||||
}
|
||||
@ -165,10 +173,17 @@ fn do_trap_load_page_fault(trap_frame: &mut TrapFrame) -> Result<(), SystemError
|
||||
let vaddr = trap_frame.badaddr;
|
||||
let cause = trap_frame.cause;
|
||||
let epc = trap_frame.epc;
|
||||
error!(
|
||||
"riscv64_do_irq: do_trap_load_page_fault: epc: {epc:#x}, vaddr={:#x}, cause={:?}",
|
||||
vaddr, cause
|
||||
);
|
||||
if trap_frame.is_from_user() {
|
||||
error!(
|
||||
"riscv64_do_irq: do_trap_load_page_fault(user mode): epc: {epc:#x}, vaddr={:#x}, cause={:?}",
|
||||
vaddr, cause
|
||||
);
|
||||
} else {
|
||||
panic!(
|
||||
"riscv64_do_irq: do_trap_load_page_fault(kernel mode): epc: {epc:#x}, vaddr={:#x}, cause={:?}",
|
||||
vaddr, cause
|
||||
);
|
||||
}
|
||||
|
||||
loop {
|
||||
spin_loop();
|
||||
|
@ -649,7 +649,7 @@ pub(super) fn do_plic_irq(trap_frame: &mut TrapFrame) {
|
||||
if claim == 0 {
|
||||
break;
|
||||
}
|
||||
debug!("plic: claim: {claim:?}");
|
||||
// debug!("plic: claim: {claim:?}");
|
||||
|
||||
let hwirq = HardwareIrqNumber::new(claim);
|
||||
if let Err(e) = GenericIrqHandler::handle_domain_irq(domain.clone(), hwirq, trap_frame) {
|
||||
|
@ -321,6 +321,7 @@ impl KernelCmdlineManager {
|
||||
continue;
|
||||
}
|
||||
|
||||
log::debug!("cmdline: argument: {:?} ", argument);
|
||||
let (node, option, value) = match self.split_arg(argument) {
|
||||
Some(v) => v,
|
||||
None => continue,
|
||||
|
@ -128,6 +128,7 @@ fn try_to_run_init_process(
|
||||
ext_args: &Option<&str>,
|
||||
trap_frame: &mut TrapFrame,
|
||||
) -> Result<(), SystemError> {
|
||||
log::debug!("Trying to run init process at {:?}", path);
|
||||
let mut args_to_insert = alloc::vec::Vec::new();
|
||||
args_to_insert.push(CString::new(path).unwrap());
|
||||
|
||||
|
@ -885,6 +885,11 @@ impl Syscall {
|
||||
Self::poll(fds, nfds, timeout)
|
||||
}
|
||||
|
||||
SYS_PPOLL => {
|
||||
log::warn!("SYS_PPOLL has not yet been implemented");
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
SYS_SETPGID => {
|
||||
warn!("SYS_SETPGID has not yet been implemented");
|
||||
Ok(0)
|
||||
|
Reference in New Issue
Block a user