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. 先确认AER注入驱动的加载状态
- 查看内核日志中的AER加载信息:
若输出包含dmesg | grep -i aeraer_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 devtmpfssudo mount -t devtmpfs none /dev - 触发udev重新生成设备节点:
执行后再次查看sudo udevadm trigger --subsystem-match=pci sudo udevadm settle/dev/aer_inject。
4. 关于驱动编译模式与最佳编译方式
- 是否编译为模块:如果需要频繁调试驱动、更换版本,编译为模块(
CONFIG_PCIEAER_INJECT=m)更灵活;生产环境追求稳定性则建议内置(y)。从你的情况看,改为模块模式更便于排查加载问题。 - 最佳编译步骤:
- 进入内核源码目录,执行
make menuconfig(或图形化的make xconfig),找到路径:Device Drivers > PCI Support > PCI Express Advanced Error Reporting support,将PCI Express AER error injection support设置为M(模块)。 - 编译内核及模块:
make -j$(nproc) sudo make modules_install sudo make install - 设置开机自动加载模块:
echo "aer_inject" | sudo tee /etc/modules-load.d/aer.conf
- 进入内核源码目录,执行
5. 额外排查点
- 进入主板BIOS/UEFI,确认PCIe AER功能已启用(部分厂商默认关闭该选项)。
- 检查目标PCIe设备是否支持AER:
若输出包含lspci -vvv | grep -i aerAdvanced Error Reporting字段,说明设备支持该功能。
内容的提问来源于stack exchange,提问作者nanoeng
相关产品推荐
相关产品推荐

