mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-08 18:26:48 +00:00
* 几个结构体 * 通过vmx_init以及create_vm,create_vcpu部分TODO * kvm_run完成一半 * 能够成功vmlaunch,但是在vmexit时候还有些问题未排查出来 * 解决了vmlaunch导致的cpu_reset的问题 * 整理代码 * 暂时性push到hyc仓库 * 修改内存虚拟化部分参数传入,解决死锁问题 * 初步完成ept映射.但不停EPT_VIOLATION * 初步完成了EPT映射,但是读写内存还是有点问题 * fixme * 更新了一些truncate到from_bits_unchecked的实现 * 完成内存虚拟化EPT_VIOLATION的映射 * fmt * Remove /fixme from .gitignore * Remove /fixme file * Update kernel/src/init/init.rs Co-authored-by: Samuel Dai <samuka007@dragonos.org> * Update kernel/src/init/init.rs Co-authored-by: Samuel Dai <samuka007@dragonos.org> * 修改了注释格式,删除了附带的一些文件操作 * feat(syscall): 实现syscall restart (#1075) 能够在系统调用返回ERESTARTSYS时,信号处理结束后,自动重启系统调用. TODO: 实现wait等需要restart_block的系统调用的重启 Signed-off-by: longjin <longjin@DragonOS.org> * chore: update docker image version in script && update doc (#1076) * chore: update docker image version in script * chore: replace lots of spaces with newline in doc * fix: 修复wait4系统调用部分语义与Linux不一致的问题 (#1080) * fix: 修复wait4系统调用部分语义与Linux不一致的问题 解决wait不住/wait之后卡死的bug --------- Signed-off-by: longjin <longjin@DragonOS.org> * feat(fs/syscall): 实现fchdir系统调用 (#1081) Signed-off-by: longjin <longjin@DragonOS.org> * fix(mm): 修复fat文件系统的PageCache同步问题 (#1005) --------- Co-authored-by: longjin <longjin@DragonOS.org> * fix: 修正nographic启动时,控制台日志未能输出到文件的问题 (#1082) Signed-off-by: longjin <longjin@DragonOS.org> * fix(process): 修复copy_process的一些bug & 支持默认init进程传参 (#1083) - 修复`copy_process`函数对标志位处理不正确的bug - init进程搜索列表中,支持为默认init程序传入参数 Signed-off-by: longjin <longjin@DragonOS.org> * feat: 完善sys_reboot (#1084) * fix(process): 修复copy_process的一些bug & 支持默认init进程传参 - 修复`copy_process`函数对标志位处理不正确的bug - init进程搜索列表中,支持为默认init程序传入参数 Signed-off-by: longjin <longjin@DragonOS.org> * feat: 完善sys_reboot - 校验magic number - 支持多个cmd (具体内容未实现) Signed-off-by: longjin <longjin@DragonOS.org> --------- Signed-off-by: longjin <longjin@DragonOS.org> * fix: 修复do_wait函数在wait所有子进程时,忘了释放锁就sleep的bug (#1089) Signed-off-by: longjin <longjin@DragonOS.org> * pull主线并且fmt --------- Signed-off-by: longjin <longjin@DragonOS.org> Co-authored-by: GnoCiYeH <heyicong@dragonos.org> Co-authored-by: Samuel Dai <samuka007@dragonos.org> Co-authored-by: LoGin <longjin@DragonOS.org> Co-authored-by: LIU Yuwei <22045841+Marsman1996@users.noreply.github.com> Co-authored-by: MemoryShore <1353318529@qq.com>
121 lines
3.3 KiB
Rust
121 lines
3.3 KiB
Rust
use crate::{
|
|
arch::{
|
|
init::{early_setup_arch, setup_arch, setup_arch_post},
|
|
time::time_init,
|
|
CurrentIrqArch, CurrentSMPArch, CurrentSchedArch,
|
|
},
|
|
driver::{
|
|
acpi::acpi_init, base::init::driver_init, serial::serial_early_init,
|
|
video::VideoRefreshManager,
|
|
},
|
|
exception::{init::irq_init, softirq::softirq_init, InterruptArch},
|
|
filesystem::vfs::core::vfs_init,
|
|
init::init_intertrait,
|
|
libs::{
|
|
futex::futex::Futex,
|
|
lib_ui::{
|
|
screen_manager::{scm_init, scm_reinit},
|
|
textui::textui_init,
|
|
},
|
|
printk::early_init_logging,
|
|
},
|
|
mm::init::mm_init,
|
|
process::{kthread::kthread_init, process_init, ProcessManager},
|
|
sched::SchedArch,
|
|
smp::{early_smp_init, SMPArch},
|
|
syscall::Syscall,
|
|
time::{
|
|
clocksource::clocksource_boot_finish, timekeeping::timekeeping_init, timer::timer_init,
|
|
},
|
|
};
|
|
use log::warn;
|
|
|
|
use super::{
|
|
boot::{boot_callback_except_early, boot_callbacks},
|
|
cmdline::kenrel_cmdline_param_manager,
|
|
};
|
|
|
|
/// The entry point for the kernel
|
|
///
|
|
/// 前面可能会有一个架构相关的函数
|
|
pub fn start_kernel() -> ! {
|
|
// 进入内核后,中断应该是关闭的
|
|
assert!(!CurrentIrqArch::is_irq_enabled());
|
|
|
|
do_start_kernel();
|
|
|
|
CurrentSchedArch::initial_setup_sched_local();
|
|
|
|
CurrentSchedArch::enable_sched_local();
|
|
|
|
ProcessManager::arch_idle_func();
|
|
}
|
|
|
|
#[inline(never)]
|
|
fn do_start_kernel() {
|
|
init_before_mem_init();
|
|
|
|
unsafe { mm_init() };
|
|
|
|
// crate::debug::jump_label::static_keys_init();
|
|
if scm_reinit().is_ok() {
|
|
if let Err(e) = textui_init() {
|
|
warn!("Failed to init textui: {:?}", e);
|
|
}
|
|
}
|
|
// 初始化内核命令行参数
|
|
kenrel_cmdline_param_manager().init();
|
|
boot_callback_except_early();
|
|
|
|
init_intertrait();
|
|
|
|
vfs_init().expect("vfs init failed");
|
|
driver_init().expect("driver init failed");
|
|
|
|
acpi_init().expect("acpi init failed");
|
|
crate::sched::sched_init();
|
|
process_init();
|
|
early_smp_init().expect("early smp init failed");
|
|
irq_init().expect("irq init failed");
|
|
setup_arch().expect("setup_arch failed");
|
|
CurrentSMPArch::prepare_cpus().expect("prepare_cpus failed");
|
|
|
|
// sched_init();
|
|
softirq_init().expect("softirq init failed");
|
|
Syscall::init().expect("syscall init failed");
|
|
timekeeping_init();
|
|
time_init();
|
|
timer_init();
|
|
kthread_init();
|
|
setup_arch_post().expect("setup_arch_post failed");
|
|
clocksource_boot_finish();
|
|
Futex::init();
|
|
crate::bpf::init_bpf_system();
|
|
crate::debug::jump_label::static_keys_init();
|
|
|
|
// #[cfg(all(target_arch = "x86_64", feature = "kvm"))]
|
|
// crate::virt::kvm::kvm_init();
|
|
#[cfg(all(target_arch = "x86_64", feature = "kvm"))]
|
|
crate::arch::vm::vmx::vmx_init().unwrap();
|
|
}
|
|
|
|
/// 在内存管理初始化之前,执行的初始化
|
|
#[inline(never)]
|
|
fn init_before_mem_init() {
|
|
serial_early_init().expect("serial early init failed");
|
|
let video_ok = unsafe { VideoRefreshManager::video_init().is_ok() };
|
|
scm_init(video_ok);
|
|
|
|
early_init_logging();
|
|
|
|
early_setup_arch().expect("setup_arch failed");
|
|
|
|
boot_callbacks()
|
|
.init_kernel_cmdline()
|
|
.inspect_err(|e| {
|
|
log::error!("Failed to init kernel cmdline: {:?}", e);
|
|
})
|
|
.ok();
|
|
kenrel_cmdline_param_manager().early_init();
|
|
}
|