1 use alloc::sync::Arc; 2 3 use crate::{ 4 process::{ 5 fork::CloneFlags, 6 kthread::{KernelThreadCreateInfo, KernelThreadMechanism}, 7 Pid, 8 }, 9 syscall::SystemError, 10 }; 11 12 impl KernelThreadMechanism { 13 /// 伪造trapframe,创建内核线程 14 /// 15 /// ## 返回值 16 /// 17 /// 返回创建的内核线程的pid 18 pub fn __inner_create( 19 info: &Arc<KernelThreadCreateInfo>, 20 clone_flags: CloneFlags, 21 ) -> Result<Pid, SystemError> { 22 unimplemented!("KernelThreadMechanism::__inner_create") 23 } 24 } 25 26 /// 内核线程引导函数的第一阶段 27 /// 28 /// 当内核线程开始执行时,会先执行这个函数,这个函数会将伪造的trapframe中的数据弹出,然后跳转到第二阶段 29 /// 30 /// 跳转之后,指向Box<KernelThreadClosure>的指针将传入到stage2的函数 31 // #[naked] 32 // pub(super) unsafe extern "C" fn kernel_thread_bootstrap_stage1() { 33 // todo!() 34 // } 35 pub(super) unsafe extern "C" fn kernel_thread_bootstrap_stage1() { 36 // 这个函数要是naked的,只是因为现在还没有实现,而naked func不能打`unimplemented!()` 37 // 所以先写成了普通函数 38 unimplemented!("kernel_thread_bootstrap_stage1") 39 } 40