kernel 调用uefi的run time service 关机

当上层调用reboot命令时,就会调用到arch/arm64/kernel/process.c 中的SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,void __user *, arg)
{
    struct pid_namespace *pid_ns = task_active_pid_ns(current);
    char buffer[256];
    int ret = 0;

    

    mutex_lock(&reboot_mutex);
    switch (cmd) {
    case LINUX_REBOOT_CMD_RESTART:
        kernel_restart(NULL);
        break;
    case LINUX_REBOOT_CMD_POWER_OFF:
        kernel_power_off();
        do_exit(0);
        break;


}
我们重点开看请参数是LINUX_REBOOT_CMD_RESTART时,会调用kernel_restart->machine_restart
void machine_restart(char *cmd)
{
  

************* Preparing the environment for Debugger Extensions Gallery repositories ************** ExtensionRepository : Implicit UseExperimentalFeatureForNugetShare : true AllowNugetExeUpdate : true NonInteractiveNuget : true AllowNugetMSCredentialProviderInstall : true AllowParallelInitializationOfLocalRepositories : true EnableRedirectToChakraJsProvider : false -- Configuring repositories ----> Repository : LocalInstalled, Enabled: true ----> Repository : UserExtensions, Enabled: true >>>>>>>>>>>>> Preparing the environment for Debugger Extensions Gallery repositories completed, duration 0.000 seconds ************* Waiting for Debugger Extensions Gallery to Initialize ************** >>>>>>>>>>>>> Waiting for Debugger Extensions Gallery to Initialize completed, duration 0.000 seconds ----> Repository : UserExtensions, Enabled: true, Packages count: 0 ----> Repository : LocalInstalled, Enabled: true, Packages count: 44 Microsoft (R) Windows Debugger Version 10.0.27829.1001 AMD64 Copyright (c) Microsoft Corporation. All rights reserved. Loading Dump File [C:\Windows\Minidump\071525-14000-01.dmp] Mini Kernel Dump File: Only registers and stack trace are available ************* Path validation summary ************** Response Time (ms) Location Deferred srv* Symbol search path is: srv* Executable search path is: Windows 10 Kernel Version 26100 MP (32 procs) Free x64 Product: WinNt, suite: TerminalServer SingleUserTS Personal Kernel base = 0xfffff803`85000000 PsLoadedModuleList = 0xfffff803`85ef4420 Debug session time: Tue Jul 15 17:28:19.638 2025 (UTC + 8:00) System Uptime: 0 days 0:17:31.281 Loading Kernel Symbols ............................................................... ................................................................ ................................................................ ............................................ Loading User Symbols Loading unloaded module list ............................. For analysis of this file, run !analyze -v nt!KeBugCheckEx: fffff803`85487cc0 48894c2408 mov qword ptr [rsp+8],rcx ss:0018:ffffc881`cabadb10=0000000000000101 8: kd> !analyze -v Loading Kernel Symbols ............................................................... ................................................................ ................................................................ ............................................ Loading User Symbols Loading unloaded module list ............................. ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* CLOCK_WATCHDOG_TIMEOUT (101) An expected clock interrupt was not received on a secondary processor in an MP system within the allocated interval. This indicates that the specified processor is hung and not processing interrupts. Arguments: Arg1: 0000000000000006, Clock interrupt time out interval in nominal clock ticks. Arg2: 0000000000000000, 0. Arg3: ffffc881ca7a4180, The PRCB address of the hung processor. Arg4: 0000000000000002, The index of the hung processor. Debugging Details: ------------------ KEY_VALUES_STRING: 1 Key : Analysis.CPU.mSec Value: 1796 Key : Analysis.Elapsed.mSec Value: 10236 Key : Analysis.IO.Other.Mb Value: 0 Key : Analysis.IO.Read.Mb Value: 23 Key : Analysis.IO.Write.Mb Value: 0 Key : Analysis.Init.CPU.mSec Value: 359 Key : Analysis.Init.Elapsed.mSec Value: 11295 Key : Analysis.Memory.CommitPeak.Mb Value: 103 Key : Analysis.Version.DbgEng Value: 10.0.27829.1001 Key : Analysis.Version.Description Value: 10.2503.24.01 amd64fre Key : Analysis.Version.Ext Value: 1.2503.24.1 Key : Bugcheck.Code.LegacyAPI Value: 0x101 Key : Bugcheck.Code.TargetModel Value: 0x101 Key : Dump.Attributes.AsUlong Value: 0x21008 Key : Dump.Attributes.DiagDataWrittenToHeader Value: 1 Key : Dump.Attributes.ErrorCode Value: 0x0 Key : Dump.Attributes.KernelGeneratedTriageDump Value: 1 Key : Dump.Attributes.LastLine Value: Dump completed successfully. Key : Dump.Attributes.ProgressPercentage Value: 0 Key : Failure.Bucket Value: CLOCK_WATCHDOG_TIMEOUT_nt!KeAccumulateTicks Key : Failure.Hash Value: {f9e2f3e5-5717-d66f-239c-7b2e10a43f9e} Key : Stack.Pointer Value: ISR BUGCHECK_CODE: 101 BUGCHECK_P1: 6 BUGCHECK_P2: 0 BUGCHECK_P3: ffffc881ca7a4180 BUGCHECK_P4: 2 FILE_IN_CAB: 071525-14000-01.dmp DUMP_FILE_ATTRIBUTES: 0x21008 Kernel Generated Triage Dump FAULTING_THREAD: ffff9a8ea34b5040 FAULTING_PROCESSOR: 2 PROCESS_NAME: System BLACKBOXBSD: 1 (!blackboxbsd) BLACKBOXNTFS: 1 (!blackboxntfs) BLACKBOXPNP: 1 (!blackboxpnp) BLACKBOXWINLOGON: 1 CUSTOMER_CRASH_COUNT: 1 STACK_TEXT: ffffc881`cabadb08 fffff803`852d6b0f : 00000000`00000101 00000000`00000006 00000000`00000000 ffffc881`ca7a4180 : nt!KeBugCheckEx ffffc881`cabadb10 fffff803`852f3e48 : 00000000`00000000 ffffc881`cab9a700 ffffc881`cab91180 ffffc881`cab91180 : nt!KeAccumulateTicks+0x6bf ffffc881`cabadb80 fffff803`852f3a39 : 00000000`00000020 00000000`00000000 00000002`729cec98 fffff780`00000350 : nt!KiUpdateRunTime+0xa8 ffffc881`cabadbe0 fffff803`852f2eff : 00000000`00000000 00000000`00000000 00000000`0000000f ffffc881`cab9a860 : nt!KiUpdateTime+0x469 ffffc881`cabade40 fffff803`852f214f : fffff803`85f8da48 ffff9a8e`77798c40 00000000`00000000 ffffc881`cab91180 : nt!KeClockInterruptNotify+0x18f ffffc881`cabadf50 fffff803`8565d6ae : 00000269`20bd783f ffff9a8e`77798c40 00000002`72e3330e 00000000`00000000 : nt!KiCallInterruptServiceRoutine+0x2df ffffc881`cabadfb0 fffff803`8565debc : 00000002`72e31f6a ffff8485`843b6c20 00000002`72e31f74 00000262`f85b278e : nt!KiInterruptSubDispatchNoLockNoEtw+0x4e ffff8485`843b6ba0 fffff803`852491c2 : 00000000`00000002 00000000`00000001 ffffc881`cab91180 00000000`00000001 : nt!KiInterruptDispatchNoLockNoEtw+0x3c ffff8485`843b6d30 fffff803`85248e95 : ffff9a8e`77824180 ffff8485`843b6e60 ffff9a8e`77824190 fffff803`00000000 : nt!KiIpiWaitForRequestBarrier+0x32 ffff8485`843b6d60 fffff803`8528dd39 : 00000000`00001000 00000000`00000000 00000000`00000001 ffffaaed`40f2a1c0 : nt!MiFlushTbList+0x885 ffff8485`843b6f70 fffff803`8528d51b : ffffda81`e5438000 00000000`ea932801 0000001c`00000000 00000000`00000004 : nt!MmSetAddressRangeModifiedEx+0x4a9 ffff8485`843b7010 fffff803`85288773 : ffff9a8e`812135c0 00000000`00000000 ffff8485`843b7200 ffff8485`843b7300 : nt!CcFlushCacheOneRange+0x1ab ffff8485`843b7100 fffff803`85288ab4 : 00000000`00000000 ffff9a8e`8109a818 00000000`00000000 ffff9a8e`8109a6e0 : nt!CcWriteBehindAsync+0x127 ffff8485`843b7270 fffff803`852882d7 : ffff9a8e`8109a79c 00000000`00000000 ffff9a8e`8109a818 ffff9a8e`778a5720 : nt!CcAsyncLazywriteWorker+0x1e4 ffff8485`843b7360 fffff803`8527f6e9 : ffff9a8e`a34b5040 ffff8485`843b74c0 fffff803`85288260 ffff9a8e`81213bb0 : nt!CcAsyncLazywriteWorkerThread+0x77 ffff8485`843b73c0 fffff803`8541d24a : ffff9a8e`a34b5040 ffff9a8e`a34b5040 fffff803`8527f540 ffff9a8e`7773fb20 : nt!ExpWorkerThread+0x1a9 ffff8485`843b7570 fffff803`8565c664 : ffffc881`caa59180 ffff9a8e`a34b5040 fffff803`8541d1f0 00000000`00000246 : nt!PspSystemThreadStartup+0x5a ffff8485`843b75c0 00000000`00000000 : ffff8485`843b8000 ffff8485`843b1000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x34 SYMBOL_NAME: nt!KeAccumulateTicks+6bf MODULE_NAME: nt IMAGE_NAME: ntkrnlmp.exe IMAGE_VERSION: 10.0.26100.1 STACK_COMMAND: .process /r /p 0xffff9a8e776ee040; .thread 0xffff9a8ea34b5040 ; kb BUCKET_ID_FUNC_OFFSET: 6bf FAILURE_BUCKET_ID: CLOCK_WATCHDOG_TIMEOUT_nt!KeAccumulateTicks OSPLATFORM_TYPE: x64 OSNAME: Windows 10 FAILURE_ID_HASH: {f9e2f3e5-5717-d66f-239c-7b2e10a43f9e} Followup: MachineOwner --------- 这个问题怎么解决
最新发布
07-16
<think>嗯,用户遇到了Windows蓝屏错误CLOCK_WATCHDOG_TIMEOUT(0x101),需要专业级的解决方案。这个错误属于硬件相关的严重系统崩溃,通常意味着处理器线程响应超时,可能涉及硬件故障、驱动不兼容或系统设置问题。 用户提到nt!KeAccumulateTicks调用导致的问题,这指向了Windows内核的时间管理机制。看来用户已经有一定调试经验,可能正在使用WinDbg分析内存转储文件。需要从软硬件两个维度提供系统化的排查方案。 硬件方面要重点考虑三点:处理器状态(尤其是超频和散热)、内存稳定性(时钟同步问题)、电源供应质量。软件层面则要关注核心驱动(如芯片组、显卡、存储控制器)和系统更新的兼容性。有趣的是,某些防病毒软件的实时监控功能也可能意外触发此类超时。 考虑到用户正在调试,应该强调内存转储分析的关键步骤:首先用!sysinfo cpuinfo确认CPU拓扑结构,再用!running -ti检查所有处理器线程的阻塞状态。如果发现某个核心上的线程长期占用资源(如显示Running for 3000+ ticks),就能准确定位故障核心。 对于时间紧迫的用户,建议优先尝试"禁用C状态"和"关闭超线程"这两个立竿见影的方案。虽然会影响能效和性能,但能快速验证是否硬件问题。如果用户系统支持,还可以指导他们临时关闭Intel Turbo Boost或AMD Precision Boost功能。 最后需要提醒备份策略——这个错误有较高风险导致数据损坏,特别是在排查过程中可能多次触发蓝屏。应该强调在安全模式下操作的必要性,毕竟反复崩溃可能损坏文件系统。</think>以下是针对Windows蓝屏错误 `CLOCK_WATCHDOG_TIMEOUT (0x101)` 的深度分析与解决方案,尤其针对 `nt!KeAccumulateTicks` 相关的处理器中断超时问题: --- ### **错误本质分析** 该错误表明**某个处理器核心未能在规定时间内响应时钟中断**(通常阈值≈5秒),核心逻辑被判定为"冻结"。触发点 `nt!KeAccumulateTicks` 是Windows内核的时间计数器更新函数,其阻塞意味着: 1. **硬件层面**:CPU核心物理故障(如过热、电压不稳) 2. **软件层面**:内核级驱动或固件死锁CPU核心 3. **系统配置**:超频/节能设置导致时钟信号异常 --- ### **排查流程图** ```mermaid graph TD A[CLOCK_WATCHDOG_TIMEOUT] --> B{是否可进入系统?} B -->|是| C[分析内存转储文件] B -->|否| D[安全模式/UEFI测试] C --> E[定位阻塞线程] D --> F[硬件压力测试] E --> G[更新/回滚驱动] F --> H[检查CPU温度/电压] G --> I[验证修复] H --> I ``` --- ### **关键解决步骤** #### **1. 内存转储分析 (WinDbg)** ```bash # 加载转储文件 .load kd !analyze -v # 检查CPU阻塞状态 !running -ti # 显示所有CPU线程运行时间 !irql # 查看中断请求级别 # 定位nt!KeAccumulateTicks上下文 knL # 显示阻塞线程的调用栈 lmvm acpi.sys # 检查ACPI驱动版本(常见冲突源) ``` - **重点观察**:若某CPU线程显示 `Running for XXXX ticks`(X值极大),表明该核心被死锁[^1]。 #### **2. 硬件诊断** - **温度监控**:使用 `HWMonitor` 检查CPU核心温度(>95°C可能触发) - **内存测试**:运行 `memtest86+` 至少4轮(时钟同步依赖内存稳定性) - **电源测试**:更换电源或使用 `OCCT` 进行12V电压波动测试(±5%为临界值) #### **3. 驱动/固件更新** ```powershell # PowerShell获取问题驱动列表 Get-WinEvent -FilterHashtable @{LogName="System"; ID="41"} | Where-Object {$_.Message -match "0x101"} | Format-List -Property * ``` - **强制更新**:芯片组驱动、存储控制器驱动、ACPI.sys - **BIOS/UEFI**:禁用 `C-States` 和 `SpeedStep`(临时测试) #### **4. 高级修复方案** - **禁用核心隔离**: ```reg [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard] "EnableVirtualizationBasedSecurity"=dword:00000000 ``` - **调整时钟中断策略**(注册表): ```reg [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager] "InterruptTimeAdjustment"=dword:00000001 # 禁用动态调整 ``` - **关闭超线程**(UEFI设置):对老旧CPU尤其有效 --- ### **预防措施** 1. **电源管理**:控制面板 → 电源选项 → 启用"高性能"模式 2. **中断平衡**:使用 `MSI Utility` 强制设备使用MSI中断模式 3. **固件锁定**:在UEFI中固定CPU电压(Offset模式优于Auto) > ⚠️ **紧急处理**:若频繁蓝屏无法进入系统,在UEFI中**禁用所有CPU C-State节能选项**可临时恢复运行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值