本文档列出了 Fuchsia 设备可能会重新启动的原因。有些方法不言自明,而有些则需要一些额外的背景信息。
概述:
术语
异常重新启动
非正常重新启动是指由内核为响应错误(如内核崩溃)而发起的重新启动,或由硬件在无软件干预(例如硬件监控计时器超时)的情况下执行的重新启动。
安全重新启动
安全重新启动是指由用户空间进程发起的重新启动。该进程可能会为了响应错误而启动重新启动(例如当设备温度过高时),但 Fuchsia 应该有机会有序关闭。
已列出重启原因
内核崩溃
如果内核无法从内部错误中恢复,该错误会被视为严重错误,系统将重新启动。
系统内存不足
如果内核检测到可用物理内存量低于阈值,则会重新启动。内核不会在重新启动之前终止进程以尝试回收内存,这意味着单个进程可能会导致系统级内存不足,并强制设备重新启动。
冷启动
如果设备在关机和重新启动之间的断电时间足够长,系统会将其确定为冷启动。
断电
当设备电压下降到可接受的阈值以下时,设备会变为棕色。只有在设备的电源或其电源相关硬件出现问题时,才会出现这种情况。
硬件监控计时器超时
Zircon 会设置一个硬件监控计时器,该计时器会在设备未在指定时间段内重置的情况下重新启动。
软件监控计时器超时
如果有人设置了软件监控计时器,那么软件监控计时器可能会重新启动设备。
短暂断电
如果设备在短时间内断电(例如,当用户拔下设备,然后快速重新插入电源时),可能无法确定重启是冷启动,并将重启视为短暂断电。请务必注意,无法量化什么内容是否依赖于硬件。
用户请求
由用户或代表用户的组件(例如 SL4F 或 RCS)确定有必要重新启动。
系统更新
负责系统更新的组件必须更新无法临时更新的一个或多个软件包。这些软件包从规范上称为基础软件包。
重试系统更新
负责系统更新的组件无法应用更新,因此设备会重新启动以重试(或者可能还原更新)。
ZBI 交换
交换 Zircon 启动映像后,设备会重新启动以应用更改。
最高温度
负责电源管理的组件检测到设备的温度过高,且系统无法通过限制 CPU 或降低音频音量来充分降低设备的温度。
会话失败
如果会话管理器无法重启崩溃的会话,或会话确定其已失败且无法恢复,则设备会重新启动。
严重组件故障
如果标记为 "on_terminate": "reboot"
的组件崩溃,设备会重新启动。
恢复出厂设置
在恢复出厂设置后,设备会重新启动。
根作业终止
如果用户空间 root 作业因某个关键进程崩溃而终止,设备会重新启动。
通用优雅
平台可以知道重新启动是否正常,但无法区分软件更新、用户请求或某个将设备检测到过热的更高级别组件。平台只知道重新启动会很正常。
未知
在某些情况下,平台无法确定具体的重新启动原因,也无法确定重新启动是正常还是不正常。
在哪里查看重新启动原因
Fuchsia 通过 FIDL 公开设备上次(重新启动)的原因,并在 Cobalt 和崩溃服务器上跟踪此原因。
罪魁祸首
因特定组件中的错误而导致的重新启动具有崩溃签名,该组件将该组件视为导致重新启动的原因。它们遵循将重新启动原因和被视为会导致重新启动的组件(也称为问题原因)相结合的一般模式。
重新启动的原因 | FIDL | Cobalt 事件 | 崩溃签名 |
---|---|---|---|
内核崩溃 | KERNEL_PANIC |
KernelPanic |
负责崩溃的函数,与用户空间崩溃报告完全相同 |
系统内存不足 | SYSTEM_OUT_OF_MEMORY |
SystemOutOfMemory |
fuchsia-oom 或 fuchsia-oom-$CULPRIT |
冷启动 | COLD |
Cold |
不适用* |
断电 | BROWNOUT |
Brownout |
fuchsia-brownout |
硬件监控计时器超时 | HARDWARE_WATCHDOG_TIMEOUT |
HardwareWatchdogTimeout |
fuchsia-hw-watchdog-timeout |
软件监控计时器超时 | SOFTWARE_WATCHDOG_TIMEOUT |
SoftwareWatchdogTimeout |
fuchsia-sw-watchdog-timeout |
短暂断电 | BRIEF POWER LOSS |
BriefPowerLoss |
fuchsia-brief-power-loss |
用户请求 | USER_REQUEST |
UserRequest |
不适用* |
系统更新 | SYSTEM_UPDATE |
SystemUpdate |
不适用* |
重试系统更新 | RETRY_SYSTEM_UPDATE |
RetrySystemUpdate |
fuchsia-retry-system-update |
ZBI 交换 | ZBI_SWAP |
ZbiSwap |
不适用* |
最高温度 | HIGH_TEMPERATURE |
HighTemperature |
fuchsia-reboot-high-temperature |
会话失败 | SESSION_FAILURE |
SessionFailure |
fuchsia-session-failure |
严重组件故障 | CRITICAL_COMPONENT_FAILURE |
CriticalComponentFailure |
fuchsia-critical-component-failure 或 fuchsia-reboot-$CULPRIT-terminated |
恢复出厂设置 | FACTORY_DATA_RESET |
FactoryDataReset |
不适用* |
根作业终止 | `ROOT_JOB_TERMINATION | RootJobTermination |
fuchsia-root-job-termination 或 fuchsia-reboot-$CULPRIT-terminated |
通用优雅 | graceful 字段设置为 true | GenericGraceful |
fuchsia-undetermined-userspace-reboot |
未知 | 未设置 graceful 字段 | Unknown |
fuchsia-reboot-log-not-parseable |
* 并非崩溃。\