mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-21 22:43:23 +00:00
refactor(process): 调整arch_switch_to_user函数,把riscv和x86_64的共用逻辑抽取出来。 (#773)
* refactor(process): Extract common logic for riscv and x86_64 in arch_switch_to_user to run_init_process 调整arch_switch_to_user函数,把riscv和x86_64的共用逻辑抽取出来。写成run_init_process函数,并且能够尝试运行多个不同的init程序,直到某个运行成功
This commit is contained in:
@ -11,7 +11,6 @@ use crate::{
|
||||
process::ProcessManager,
|
||||
syscall::{Syscall, SYS_SCHED},
|
||||
};
|
||||
use alloc::string::String;
|
||||
use system_error::SystemError;
|
||||
|
||||
use super::{
|
||||
@ -133,19 +132,6 @@ pub fn arch_syscall_init() -> Result<(), SystemError> {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
/// 执行第一个用户进程的函数(只应该被调用一次)
|
||||
///
|
||||
/// 当进程管理重构完成后,这个函数应该被删除。调整为别的函数。
|
||||
#[no_mangle]
|
||||
pub extern "C" fn rs_exec_init_process(frame: &mut TrapFrame) -> usize {
|
||||
let path = String::from("/bin/shell.elf");
|
||||
let argv = vec![String::from("/bin/shell.elf")];
|
||||
let envp = vec![String::from("PATH=/bin")];
|
||||
let r = Syscall::do_execve(path, argv, envp, frame);
|
||||
// kdebug!("rs_exec_init_process: r: {:?}\n", r);
|
||||
return r.map(|_| 0).unwrap_or_else(|e| e.to_posix_errno() as usize);
|
||||
}
|
||||
|
||||
/// syscall指令初始化函数
|
||||
pub(super) unsafe fn init_syscall_64() {
|
||||
let mut efer = x86::msr::rdmsr(x86::msr::IA32_EFER);
|
||||
|
Reference in New Issue
Block a user