调试、故障排查与安全边界

调试、故障排查与安全边界

1. 先识别驱动类型

排障前先确定:

  • platform容器;
  • 自定义bus type;
  • 外部地址窗口;
  • 错误监控器;
  • MHI/FSL-MC动态对象;
  • 目标平台是否实际匹配。

错误分类不清容易把child probe失败误判为物理bus fault。

2. 基础信息

1
2
3
4
5
cat /proc/config.gz
ls /sys/bus
ls /sys/bus/platform/drivers
cat /sys/kernel/debug/devices_deferred
dmesg -w

检查device:

1
2
3
readlink /sys/bus/platform/devices/<dev>/driver
cat /sys/bus/platform/devices/<dev>/modalias
cat /sys/bus/platform/devices/<dev>/power/runtime_status

3. DT

1
dtc -I fs -O dts /sys/firmware/devicetree/base

重点核对:

  • compatible顺序;
  • status
  • reg/ranges;
  • clocks/resets/power-domains;
  • child unit address;
  • interrupt;
  • IOMMU/MSI;
  • timing和bus-width。

运行DTB比源码DTS更有证据力。

4. Child未出现

按顺序检查:

  1. parent platform device是否创建;
  2. parent driver是否probe;
  3. 是否返回defer/error;
  4. parent是否调用populate;
  5. child compatible是否正确;
  6. address translation是否成功;
  7. child依赖是否就绪。

5. 总线错误

遇到timeout/abort:

  • 保存首条完整日志;
  • 查fault address对应DT reg/ranges;
  • 查initiator/master;
  • 确认target power/clock/reset;
  • 检查访问宽度和alignment;
  • 检查secure/non-secure权限;
  • 避免反复读故障地址制造中断风暴。

不要直接增大timeout掩盖断电或错误地址。

6. MHI

1
2
3
4
lspci -nnk
ls /sys/bus/mhi/devices
ls /sys/kernel/debug/mhi 2>/dev/null
dmesg | grep -i mhi

排障层次:

  1. PCIe枚举和BAR/MSI;
  2. controller注册;
  3. firmware/BHI;
  4. execution environment;
  5. M0/mission mode;
  6. channel devices;
  7. client driver;
  8. SYS_ERR/RDDM。

直接重载client driver不能修复controller未进入mission mode。

7. PM

1
2
cat /sys/bus/platform/devices/<parent>/power/runtime_status
cat /sys/bus/platform/devices/<parent>/power/runtime_usage

若关闭autosuspend后故障消失,继续定位缺失PM引用、clock恢复、register context或parent-child依赖,不应永久用power/control=on掩盖。

8. Dynamic Debug和Trace

1
2
echo 'file drivers/bus/* +p' > /sys/kernel/debug/dynamic_debug/control
echo 'file drivers/bus/mhi/* +p' > /sys/kernel/debug/dynamic_debug/control

只在受控环境开启,MHI debugfs可能允许修改controller状态或暴露ring信息。

9. 安全边界

高风险面:

  • 外部bus window映射;
  • 用户态MC portal;
  • MHI firmware和DMA;
  • debugfs register写;
  • sysfs timing/priority;
  • 错误handler泄露物理地址;
  • 恶意PCIe endpoint;
  • 固件动态报告大量对象/channel。

加固:

  • 关闭未用bus选项;
  • 限制debugfs;
  • 固件签名与版本控制;
  • IOMMU隔离DMA;
  • 最小化MC UAPI权限;
  • 验证所有长度、ID和ring指针;
  • error storm限速;
  • 禁止用户态直接/dev/mem改总线寄存器。

10. 性能

性能问题先区分:

  • 互连/DDR带宽;
  • 外部总线timing;
  • MHI ring/IRQ;
  • PCIe链路;
  • CPU调度;
  • runtime PM唤醒。

本目录不存在统一“bus frequency”参数,也没有可对所有驱动通用的调优sysfs。

11. 修改验证

修改bus driver至少测试:

  • cold boot/warm reboot;
  • probe defer;
  • child bind/unbind;
  • runtime/system suspend;
  • I/O压力;
  • error IRQ;
  • controller reset;
  • hot remove;
  • DMA/IOMMU fault;
  • module unload(若允许)。

基础总线错误可能影响存储、console或电源管理,必须保留可恢复启动路径。

文章互动

阅读 --

留言

0 条留言

正在加载留言…