ACPI 이벤트의 다양한 부분은 무엇을 의미하나요?

ACPI 이벤트의 다양한 부분은 무엇을 의미하나요?

저는 듀얼 배터리가 장착된 ThinkPad 노트북을 가지고 있으며, 외부 배터리를 연결/해제할 때 동작을 수행하는 GNOME용 표시기 애플리케이션을 작성하고 싶습니다. 이러한 이벤트를 읽으려면 다음과 같이 acpid 소켓에 연결합니다.

#!/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

다음과 같은 결과가 나타납니다.

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유용한 정보를 찾지 못했습니다.

답변1

이것열 1기기 카테고리입니다. 이 값은 해당 ACPI 장치를 처리하는 커널 드라이버에서 나옵니다. 이는 "클래스"(예: "배터리") 또는 "클래스/하위 클래스"(예: "버튼/전원") 형식입니다.

이것2열커널이 장치에 사용하는 이름입니다. /sys/bus/acpi/devices/각 ACPI 장치마다 일치하는 폴더가 있습니다. 이 이름의 일반적인 규칙은 다음과 같습니다.장비 유형:인스턴스 번호. 에서 언급했듯이커널 문서, 장치 유형은 다음과 같습니다.

  1. LNXBIOS의 ACPI 테이블에 설명된 특수 장치에 커널이 할당한 이름으로, .
  2. PnP HID(플러그 앤 플레이 하드웨어 ID, 일부는 섹션 5.6.7에 정의되어 있음)ACPI 사양그리고 가지고일부 목록ACPI DSDT 테이블에 HID가 할당된 다른 장치의 경우.
  3. device다른 ACPI 장치의 경우.

인스턴스 번호는 동일한 유형의 여러 장치를 구별하는 데 사용되는 증분 카운터입니다. 예를 들어 기본 배터리는 PNP0C0A:00이고 보조 배터리는 입니다 PNP0C0A:01.

이것3열이벤트 코드 또는 "알림 값"입니다. 이는 섹션 5.6.6에 정의되어 있습니다.ACPI 사양. 00000001"장치 확인"(장치가 나타나거나 사라짐), 00000003"꺼내기 요청" 및 00000080"배터리 상태가 변경됨"을 나타냅니다.

이것4열커널 드라이버에 의해 생성된 보충 값입니다. 이 열의 의미는 이벤트 코드, 드라이버 및 장치 유형의 조합에 따라 달라집니다. Linux ACPI 배터리 드라이버는 "배터리 상태 변경" 이벤트 값을 1"있음" 및 0"없음"으로 설정합니다.

관련 정보