XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

C# 实体启动诊断

实体机若停在 [Kernel] KernelConsole initialized: … chars,这句话本身不是错误信息。固定运行时在这之后关闭早期画面输出,然后调用 XFESystem 的 BeforeRun。旧镜像随后发生的自检失败只能从串口观察,不能用这一行断定具体根因。

诊断版从 Start 入口开始使用已有 framebuffer 显示下列阶段,覆盖驱动初始化和基础控制台阶段;进入 BeforeRun 时重新启用被基础生命周期关闭的文字通路。普通启动异常和自检失败会显示最近阶段和原因。首个桌面画面呈现前关闭早期文字通路,避免后续日志覆盖桌面。该通路不调用已经退出的 UEFI 服务,也不写入磁盘。

阶段 操作
A00 已进入内核生命周期
A10 初始化设备和驱动;返回后才进入 A20
A20 驱动阶段结束,开始初始化控制台
A21 基础控制台就绪
B00 已进入 XFESystem 托管内核
B10 输入与内置资源
B20 托管泛型运行时
B21 垃圾回收与深层栈根
B22 异常处理
B30 定时器、调度与线程
B40 弱引用与冻结内存
B50 JavaScript 引擎生命周期
B60 内存文件与控制台程序
B70 登记桌面显示后执行的后台网络初始化
B80 浏览器与文档渲染
B90 桌面显示表面
B99 即将呈现桌面

如果仍无法启动,记录最后一个阶段码及 XFE BOOT FAILED 后的文字。完全没有 A00 时,问题发生在生命周期入口之前,或写入的不是这份诊断镜像。硬件异常、失效的中断和运行时 failfast 可能只能留下阶段码;诊断提示不是崩溃恢复机制。

串口补丁修复固定 x64 Serial.ComWrite 的无限轮询:单字节最多检查 4096 次发送状态;全 1 状态或超限后禁用本次启动的串口发送。原有串口初始化和就绪时的端口写入保留,不新增硬件复位或端口探测。丢弃串口日志不应阻止启动,屏幕诊断走独立通路。这是已确认的代码缺陷修复,尚不能据此声称已定位本次实体启动失败。

验证分别覆盖补丁的实际生成 IL、正常串口 QEMU 启动,以及 QEMU 不创建 UART 设备时的桌面画面。QEMU 通过不等于该华硕实体机、USB 输入或 RTX 显示驱动已验收。

多核硬件上的单核执行模型

当前内核只启动 BSP,没有启动其他 AP。固定依赖却曾把 ACPI 中发现的全部处理器数量用于调度器初始化,与原生线程/EH/GC 的单核契约冲突。启动平台补丁将调度器数量设为实际启动的一个,LAPIC 中断向调度器传逻辑 CPU 0。ACPI 枚举结果和硬件 APIC 路由标识保持原样,日志分别报告发现的物理 CPU 数与调度 CPU 数;这项修复不代表已支持多核并行。

周期性的 [LAPIC] Timer tick、[STRIDE] OnTick 是调试打印,不是重启。补丁仅跳过两处正常周期打印,保留定时器计数、调度、错误 RSP 提示和原有中断应答。避免在中断中装箱、逐字符写屏幕和覆盖启动阶段,不能仅靠不再刷屏判定启动成功。

网卡就绪检测以 Stopwatch 时间戳限制总等待五秒,等待已有 LAPIC 中断,不再依赖可能缺失的 PIT IRQ0 软件定时器。该预算仍要求 LAPIC 中断可返回,且不承诺损坏的硬件中断或后续 DHCP 内部等待也受同一预算保护。

适配器检测和 DHCP 整体在首帧之后的独立线程执行,均不占用桌面启动或 UI 线程。因此内部 DHCP 等待失效也不会直接阻塞桌面显示;这不代表 DHCP 超时和网络线程自身已得到完整恢复。Physical 拓扑字段表示 ACPI 发现的逻辑处理器条目数,不等同物理插槽或物理核心数量。