首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >acpi事件的各个部分意味着什么?

acpi事件的各个部分意味着什么?
EN

Unix & Linux用户
提问于 2015-07-27 02:30:31
回答 1查看 2.3K关注 0票数 2

我有一台带有双电池的ThinkPad笔记本电脑,我想为GNOME编写一个指示器应用程序,当外部电池被插入/拔出时,它执行一个动作。要读取这些事件,我连接到acpid套接字,如下所示:

代码语言:javascript
复制
#!/usr/bin/env python3
import socket

ACPID_SOCKETFILE = "/var/run/acpid.socket"
RECV_SIZE = 4096

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(ACPID_SOCKETFILE)

try:
    while True:
        data = s.recv(RECV_SIZE)
        print(repr(data))
except:
    s.close()
    raise

我得到的输出如下:

代码语言:javascript
复制
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000001 00000001\n'
b'battery PNP0C0A:01 00000001 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'

我认为,第四列是1,如果电池是插入,0如果它是拔出。但是第二列和第三列究竟是什么意思呢?我尝试过man acpid,但没有找到任何有用的信息。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2015-12-19 01:35:19

第一列是设备类。这些值来自处理各自ACPI设备的内核驱动程序。它们要么是“类”(例如“电池”),要么是“类/子类”(例如“按钮/电源”)。

第二列是内核为设备使用的名称。每个/sys/bus/acpi/devices/设备都有一个匹配的文件夹。这些名称的一般规则是设备类型:实例编号。如内核文档中所述,设备类型为

  1. 内核为BIOS的ACPI表中描述的特殊设备指定的名称,从LNX开始。
  2. PnP HID (即插即用硬件ID;少数在ACPI规格第5.6.7节中定义,互联网上还有一些 列表 )用于在ACPI DSDT表中分配HID的其他设备。
  3. 任何其他的消费物价指数设备的device

实例号是一个递增计数器,用于区分同一类型的不同设备。例如,你的一次电池是PNP0C0A:00,你的次级电池是PNP0C0A:01

第三列是事件代码或“通知值”。它们在5.6.6节“ACPI规格”中得到了定义。00000001的意思是“设备检查”(设备出现或消失)、00000003“弹出请求”和00000080“电池状态更改”。

第四列是内核驱动程序生成的补充值。此列的含义因事件代码、驱动程序和设备类型的任何组合而不同。Linux电池驱动程序将“电池状态更改”事件的值设置为“1”表示"present“,0设置为"not”。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/218533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档