我的系统正在最小内核配置上运行(基于make defconfig
)。
现在我正在尝试找出必须启用哪些额外的 acpi 设备驱动程序才能使系统上的所有内容正常工作。为了找到匹配的驱动程序,我可以启用它,构建并重新启动,观察 dmesg。这是一个繁琐且容易出错的过程,我希望能够根据系统信息选择正确的驱动程序。
对于 PCI 或 USB 设备,我能够利用并lspci -nn
搜索vendorId:deviceId
LKDb。
我也在此数据库中看到了 ACPI 条目,但无法弄清楚如何从我的系统中提取 ACPI 设备信息。
答案1
ACPI DSDT
解决方案是从 BIOS 中转储并反编译(差异化系统描述表)。这包括特定于所用系统的 ACPI 设备初始化代码,因此也包括必要的设备 ID。
使用以下命令反编译DSDT(iasl
必须安装)
cp /sys/firmware/acpi/tables/DSDT dsdt.dat
iasl -d dsdt.dat
然后查询反编译代码中的设备id
grep '_HID.*"' dsdt.dsl
输出将包括声明设备的所有行以及相应的设备 ID。最后利用LKDDb
为设备找到必要的内核 acpi 驱动程序。
要快速提取相关行,您可以使用以下命令:
wget https://cateee.net/sources/lkddb/lkddb.list
for i in $(grep '_HID.*"' dsdt.dsl | grep -o '"[A-Z0-9]*"'); do grep "$i" lkddb.list; done | sort -u > relevant
此外列出CONFIG_*
输出中的所有变量:
cat relevant | grep -o 'CONFIG[A-Z0-9_]*' | sort -u
请注意,此列表仅供参考,并不能保证没有误报或漏报。如果你想确定自己在做什么,你应该调查一下dsdt.dsl
自己。