You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PCI Express AER驱动未生成/dev/aer_inject设备的排查求助

PCIe AER 驱动加载问题:/dev/aer_inject 设备未出现

我正通过内核官方文档的说明捕获PCI-e AER代码,自定义内核编译时已启用以下相关选项:

cat /boot/config-6.8.0-48-generic | grep -i PCIEAER
CONFIG_ACPI_APEI_PCIEAER=y
CONFIG_PCIEAER=y
CONFIG_PCIEAER_INJECT=y
CONFIG_PCIEPORTBUS=y

执行lspci命令时,目标设备可正常显示。但按照驱动文档要求重启PC后,/dev/aer_inject设备并未出现。尝试过相关社区解决方案后结果仍相同。想了解:

  1. 还有哪些加载驱动的方法?
  2. 是否应将驱动编译为内核模块?若是,最佳编译方式是什么?

排查与解决步骤

1. 先确认AER注入驱动的加载状态

  • 查看内核日志中的AER加载信息:
    dmesg | grep -i aer
    
    若输出包含aer_inject: PCIe AER error injection driver loaded,说明驱动已初始化;无相关日志则表示驱动未正确加载。
  • 检查已加载模块列表:
    lsmod | grep aer_inject
    
    输出为空则代表模块未加载。

2. 手动加载aer_inject模块(编译为模块时适用)

如果内核配置中CONFIG_PCIEAER_INJECT设为m(模块模式),可手动触发加载:

sudo modprobe aer_inject

加载完成后再次检查/dev/aer_inject是否生成;若加载失败,通过dmesg查看具体错误(比如依赖模块缺失)。

3. 内置驱动(CONFIG_PCIEAER_INJECT=y)但设备节点未生成的处理

  • 确认devtmpfs挂载状态(现代内核默认启用):
    mount | grep devtmpfs
    
    若未挂载,手动执行:
    sudo mount -t devtmpfs none /dev
    
  • 触发udev重新生成设备节点:
    sudo udevadm trigger --subsystem-match=pci
    sudo udevadm settle
    
    执行后再次查看/dev/aer_inject。

4. 关于驱动编译模式与最佳编译方式

  • 是否编译为模块:如果需要频繁调试驱动、更换版本,编译为模块(CONFIG_PCIEAER_INJECT=m)更灵活;生产环境追求稳定性则建议内置(y)。从你的情况看,改为模块模式更便于排查加载问题。
  • 最佳编译步骤:
    1. 进入内核源码目录,执行make menuconfig(或图形化的make xconfig),找到路径:Device Drivers > PCI Support > PCI Express Advanced Error Reporting support,将PCI Express AER error injection support设置为M(模块)。
    2. 编译内核及模块:
      make -j$(nproc)
      sudo make modules_install
      sudo make install
      
    3. 设置开机自动加载模块:
      echo "aer_inject" | sudo tee /etc/modules-load.d/aer.conf
      

5. 额外排查点

  • 进入主板BIOS/UEFI,确认PCIe AER功能已启用(部分厂商默认关闭该选项)。
  • 检查目标PCIe设备是否支持AER:
    lspci -vvv | grep -i aer
    
    若输出包含Advanced Error Reporting字段,说明设备支持该功能。

内容的提问来源于stack exchange,提问作者nanoeng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:41:06