我想对自定义设备上的盖子打开/关闭事件做出反应,但盖子按钮的驱动程序似乎未正确加载/绑定。
我使用的系统是一个定制硬件,其核心是 TQMxE39M 模块(Intel CPU)。盖子按钮输入当前连接到基板上的一个简单开关。至于软件,我使用自定义 yocto 图像,该图像使用“poky”和“meta-intel”层的“sumo”分支。机器设置为“genericx86-64”。使用的内核是Linux-yocto 4.14.30,仅做了两处小改动(未与acpi连接)。 ACPI 驱动程序“按钮”被编译到内核中,据我所知,这是应该处理盖子按钮的驱动程序。
启动后,我可以在 /sys/bus/acpi/devices 下看到盖子设备为“PNP0C0D:00”。至少我相信这将是正确的设备,因为 acpi/button.c 驱动程序源文件引用名称“PNP0C0D”作为盖子按钮,但该设备没有绑定到它的驱动程序。
我的问题是:为什么 linux 没有检测到这个设备作为盖子按钮并将正确的驱动程序绑定到它?
到目前为止我的观察:
我已经转储并反编译了设备的 ACPI 数据,我可以看到名为“LID0”的设备是使用 EisaId“PNP0C0D”定义的。该设备在“_SB.PCI0.LPCB”范围内定义。
由同一个驱动程序操作的电源按钮确实有效!它是使用 EisaId“PNP0C0C”在范围“_SB”内的 ACPI 数据中定义的。我觉得奇怪的是,我可以在 /sys/bus/acpi/devices 下看到两个这样的设备:“PNP0C0C:00”和“PNP0C0C:01”,其中只有后者绑定到 acpi/button 驱动程序。
我也使用标准 xUbuntu 18.04.1 启动了设备。这具有完全相同的效果。电源按钮的工作方式如第 2 点中所述,并且显示了盖子设备,但未绑定。