FUCK
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
#include <utsm/dsk.h>
|
||||
#include <utsm/block.h>
|
||||
#include <utsm/net.h>
|
||||
#include <utsm/ipc_shm.h>
|
||||
|
||||
void arch_halt_forever(void);
|
||||
|
||||
@@ -43,6 +44,49 @@ void kernel_main(void) {
|
||||
int result = utsm_selftest_run();
|
||||
if (result == 0) {
|
||||
log_info("[UTSM] SELFTEST PASS");
|
||||
|
||||
/* Phase 1.1: VMM (VMX/EPT) 初始化 + 自检
|
||||
* 若 VMX 不可用(如 QEMU 未启用),仅警告,不阻断 DSK 启动 */
|
||||
if (vmm_init() == 0) {
|
||||
log_info("[UTSM] VMM init ok");
|
||||
int vmm_st = vmm_self_test();
|
||||
if (vmm_st == 0) {
|
||||
log_info("[UTSM] VMM self-test PASS");
|
||||
|
||||
/* Phase 1.2: Linux 加载器 + 启动
|
||||
* 若 bzImage 模块存在,加载并启动 Linux guest。
|
||||
* 若无 bzImage,跳过 Linux 启动,继续 DSK 流程。 */
|
||||
if (linux_loader_init() == 0) {
|
||||
log_info("[UTSM] Linux loader init ok");
|
||||
|
||||
/* Phase 1.3: Initialize IPC shared memory before
|
||||
* launching Linux. Allocates 1MB, initializes ring
|
||||
* buffers, and EPT-maps at GPA 0x04000000 so the
|
||||
* Linux guest can access it via UTSM_HCALL_SHM_INFO. */
|
||||
if (ipc_shm_init() == 0) {
|
||||
log_info("[UTSM] IPC shm init ok");
|
||||
} else {
|
||||
log_error("[UTSM] IPC shm init failed (non-fatal)");
|
||||
}
|
||||
|
||||
int lin_st = linux_launch();
|
||||
if (lin_st == 0) {
|
||||
log_info("[UTSM] Linux guest terminated");
|
||||
} else {
|
||||
log_error("[UTSM] Linux launch failed");
|
||||
log_hex64("[UTSM] Linux st=", (u64)(i64)lin_st);
|
||||
}
|
||||
} else {
|
||||
log_warn("[UTSM] Linux loader unavailable (no bzImage)");
|
||||
}
|
||||
} else {
|
||||
log_error("[UTSM] VMM self-test FAIL");
|
||||
log_hex64("[UTSM] VMM st=", (u64)(i64)vmm_st);
|
||||
}
|
||||
} else {
|
||||
log_warn("[UTSM] VMM unavailable (VMX not supported or disabled)");
|
||||
}
|
||||
|
||||
if (dsk_load_and_jump() != 0) {
|
||||
log_error("[UTSM] DSK jump failed");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user