本文共 1268 字,大约阅读时间需要 4 分钟。
acpi_bus_generate_netlink_event 这个函数会根据形参来组建一个netlink的message,并发送这个message到user space其源码分析如下:int acpi_bus_generate_netlink_event(const char *device_class, const char *bus_id, u8 type, int data){ struct sk_buff *skb; struct nlattr *attr; struct acpi_genl_event *event; void *msg_header; int size; /* allocate memory */ #申请一个用于保存message的内存空间 size = nla_total_size(sizeof(struct acpi_genl_event)) + nla_total_size(0); #用申请到的内存生成一个sk_buff skb = genlmsg_new(size, GFP_ATOMIC); if (!skb) return -ENOMEM; /* add the genetlink message header */ #给sk_buff 天剑header msg_header = genlmsg_put(skb, 0, acpi_event_seqnum++, &acpi_event_genl_family, 0, ACPI_GENL_CMD_EVENT); if (!msg_header) { nlmsg_free(skb); return -ENOMEM; } /* fill the data */ attr = nla_reserve(skb, ACPI_GENL_ATTR_EVENT, sizeof(struct acpi_genl_event)); if (!attr) { nlmsg_free(skb); return -EINVAL; } #给要发送的event赋值 event = nla_data(attr); memset(event, 0, sizeof(struct acpi_genl_event)); strcpy(event->device_class, device_class); strcpy(event->bus_id, bus_id); event->type = type; event->data = data; #标志skb结束 /* send multicast genetlink message */ genlmsg_end(skb, msg_header); #发送event genlmsg_multicast(&acpi_event_genl_family, skb, 0, 0, GFP_ATOMIC); return 0;}
转载地址:http://hdnmi.baihongyu.com/