跳转到内容
实战指南troubleshooting

内核与硬件故障排查

按先收集证据、再核对驱动、最后最小变更的顺序排查硬件识别问题。

状态
已审阅
难度
进阶
风险
会改变系统
平台
linux · raspberry-pi-os

在不清空日志、不强制加载模块的前提下,记录内核版本和错误消息,核对候选模块,预演后执行一次可验证、可回滚的加载。

  • 已备份重要数据,系统仍可通过本地控制台恢复。
  • 记录故障发生前后的硬件、内核或配置变化。
  • 候选模块必须来自当前系统的可信软件源,并与当前内核匹配。
  • 不在线卸载承载根存储、网络连接或控制台的驱动。
  1. 先保存只读基线,不清空环形缓冲区:

    Terminal window
    uname -srmo
    lsblk -o NAME,PATH,TYPE,SIZE,FSTYPE,MOUNTPOINTS,MODEL,TRAN
    dmesg --level=err,warn --ctime --color=never | tail -n 120
  2. 在重现一次硬件事件时观察新消息,完成后按 Ctrl+C

    Terminal window
    sudo dmesg --follow --level=err,warn,notice --color=never

    保存方法和错误关键词,不直接发布包含序列号或系统拓扑的原始日志。

  3. 根据硬件文档和日志确定候选模块名,再替换占位值并核对:

    Terminal window
    MODULE=module_name
    if [[ -z "$MODULE" || "$MODULE" == module_name ]]; then
    printf '%s\n' '请先填写并核对模块名' >&2
    else
    modinfo -- "$MODULE" && sudo modprobe --dry-run --verbose -- "$MODULE"
    fi

    只有预演成功且再次人工确认模块名与影响范围后,才继续下一步。

  4. 仅当模块来源、依赖和影响均符合预期时加载,并立即收集结果:

    Terminal window
    sudo modprobe -- "$MODULE"
    lsmod | grep -w -- "$MODULE" || true
    dmesg --level=err,warn,notice --ctime --color=never | tail -n 80

确认目标硬件功能恢复,且最新内核消息没有新增错误。模块不在 lsmod 中也可能是驱动已内建;不要仅凭这一项下结论。

若本次加载未解决问题,并已确认模块不承载存储、网络、控制台且没有使用者,可卸载:

Terminal window
sudo modprobe -r -- "$MODULE"
dmesg --level=err,warn,notice --ctime --color=never | tail -n 80

出现 in use 时停止,不使用强制选项。若系统不稳定,优先重启回到已知启动配置并撤销本次持久化配置;本指南本身不会写入开机加载规则。

现象 可能原因 处理
Module not found 当前内核没有该模块或依赖数据库缺失 核对 uname -r、模块包和内核配置,不下载未知模块。
Invalid module format 架构、版本或构建信息不匹配 安装与当前内核严格匹配的模块。
签名或权限错误 内核签名策略或权限阻止加载 保留安全策略,按发行版可信签名流程处理。
模块加载但设备不可用 固件、电源、总线或绑定仍失败 回到最新内核消息逐项检查,不反复强制加载。