You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ACPI Netlink多播数据结构中event_type与event_data字段对应什么?

ACPI Netlink事件中event_type和event_data字段语义查询

我在Linux环境下测试ACPI Netlink,通过libnl库并借助acpid2定义的数据结构订阅acpi_mc_group以获取ACPI事件通知。其中device_class和bus_id字段含义明确,但找不到任何资料说明event_type和event_data字段对应的语义(即整数值对应的枚举映射实际含义)。仅通过测试发现,当device_class为ac_adapter时,event_type为128对应充电器插拔事件,event_data为0表示拔出,1表示插入,除此之外一无所知。

最小可复现示例(MWE)

#include <netlink/netlink.h>
#include <netlink/genl/ctrl.h>
#include <netlink/genl/genl.h>
#include "acpi_genetlink.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int acpi_handler(struct nl_msg* msg, void *data) {
    struct nlmsghdr *msghdr = nlmsg_hdr(msg);
    struct nlattr *attrs[ACPI_GENL_ATTR_MAX + 1];
    genlmsg_parse(msghdr, 0, attrs, ACPI_GENL_ATTR_MAX, NULL);
    struct acpi_genl_event *event = nla_data(attrs[ACPI_GENL_ATTR_MAX]);
    printf("NOTIFICATION:\n");
    printf("	device class: %s\n"
           "	bus id:       %s\n"
           "	event type:   %u\n"
           "	event data:   %u\n"
           , event->device_class, event->bus_id, event->type, event->data);
    return NL_OK;
}

int main (void) {
    struct nl_sock *sock = nl_socket_alloc();
    genl_connect(sock);
    nl_socket_disable_seq_check(sock);
    int acpi_mc_group = genl_ctrl_resolve_grp(sock, ACPI_EVENT_FAMILY_NAME, ACPI_EVENT_MCAST_GROUP_NAME);
    nl_socket_add_membership(sock, acpi_mc_group);
    nl_socket_modify_cb(sock, NL_CB_VALID, NL_CB_CUSTOM, acpi_handler, NULL);

    while (1) {
        nl_recvmsgs_default(sock);
    }

    nl_close(sock);
    nl_socket_free(sock);
}
#ifndef __ACPI_GENETLINK_H__
#define __ACPI_GENETLINK_H__ 1

#include <linux/types.h>

struct acpi_genl_event {
        char device_class[20];
        char bus_id[15];
        __u32 type;
        __u32 data;
};

/* attributes of acpi_genl_family */
enum {
        ACPI_GENL_ATTR_UNSPEC,
        ACPI_GENL_ATTR_EVENT,   /* ACPI event info needed by user space */
        __ACPI_GENL_ATTR_MAX,
};
#define ACPI_GENL_ATTR_MAX (__ACPI_GENL_ATTR_MAX - 1)

/* commands supported by the acpi_genl_family */
enum {
        ACPI_GENL_CMD_UNSPEC,
        ACPI_GENL_CMD_EVENT,    /* kernel->user notifications for ACPI events */
        __ACPI_GENL_CMD_MAX,
};
#define ACPI_GENL_CMD_MAX (__ACPI_GENL_CMD_MAX - 1)
#define GENL_MAX_FAM_OPS        256
#define GENL_MAX_FAM_GRPS       256

#define ACPI_EVENT_FAMILY_NAME      "acpi_event"
#define ACPI_EVENT_MCAST_GROUP_NAME "acpi_mc_group"

#endif

内容的提问来源于stack exchange,提问作者TheyCallMeHacked

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:28:10