linux中netlink使用:
此代码片段是在文件:app\video\ueventmonitor\ueventmonitor.c中出现的,在sdk的初始化的时候建立的线程。
初步分析此代码的作用是,使用netlink的机制实现接收,事件中断时的消息,解析接收到的消息,根据不同的消息内容,执行不同的操作。主要涉及到如下的事件:
1.电池状态事件。如:电量过低。
2.块设备事件。如:sd卡的插入。
3.usb事件。如:macrousb的插入,
4.芯片的温度状态更新事件。
5.摄像头的添加等。
static void *event_monitor_thread(void *arg)
{
int sockfd;
int i, j, len;
char buf[512];
struct iovec iov;
struct msghdr msg;
struct sockaddr_nl sa;
struct _uevent event;
prctl(PR_SET_NAME, "event_monitor", 0, 0, 0);
pthread_mutex_init(&collision_lock, NULL);
memset(&sa, 0, sizeof(sa));
sa.nl_family = AF_NETLINK;
sa.nl_groups = NETLINK_KOBJECT_UEVENT;
sa.nl_pid = 0;
memset(&msg, 0, sizeof(msg));
iov.iov_base = (void *)buf;
iov.iov_len = siz