//@system/core/rootdir/init.rc
on early-init
start ueventd
....
service ueventd /sbin/ueventd
critical
//@system/core/init/ueventd.c
int ueventd_main(int argc, char **argv)
+-- get_hardware_name(hardware, &revision);
+-- ueventd_parse_config_file("/ueventd.rc"); //解析ueventd.rc
+-- snprintf(tmp, sizeof(tmp), "/ueventd.%s.rc", hardware);
+-- ueventd_parse_config_file(tmp); //解析ueventd.xxx.rc
+-- device_init();
+-- device_fd = open_uevent_socket();
+-- struct sockaddr_nl addr;
+-- memset(&addr, 0, sizeof(addr));
+-- addr.nl_family = AF_NETLINK;
+-- addr.nl_pid = getpid();
+-- addr.nl_groups = 0xffffffff;
+-- s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); //创建关联NETLINK_KOBJECT_UEVENT事件的socket
+-- setsockopt(s, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz));
+-- setsockopt(s, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
+-- bind(s, (struct sockaddr *) &addr, sizeof(addr)
+-- fcntl(device_fd, F_SETFD, FD_CLOEXEC);
+-- fcntl(device_fd, F_SETFL, O_NONBLOCK);
+-- if (stat(coldboot_done, &info) < 0) {
t0 = get_usecs();
coldboot("/sys/class");
coldboot("/sys/block");
coldboot("/sys/devices");
t1 = get_usecs();
fd = open(coldboot_done, O_WRONLY|O_CREAT, 0000);
close(fd);
log_event_print("coldboot %ld uS\n", ((long) (t1 - t0)));
} else {
log_event_print("skipping coldboot, already done\n");
}
+-- ufd.events = POLLIN;
+-- ufd.fd = get_device_fd();
+-- return device_fd; //static int device_fd = -1;
+-- while(1) {
ufd.revents = 0;
nr = poll(&ufd, 1, -1); //轮询NETLINK_KOBJECT_UEVENT事件
if (nr <= 0)
continue;
if (ufd.revents == POLLIN)
handle_device_fd(); //处理轮询到的NETLINK_KOBJECT_UEVENT事件
/*
+-- for(;;) {
char msg[UEVENT_MSG_LEN+2];
struct iovec iov = {msg, sizeof(msg)};
struct msghdr hdr = {&snl, sizeof(snl), &iov, 1, cred_msg, sizeof(cred_msg), 0};
...
ssize_t n = recvmsg(device_fd, &hdr, 0); //接收到的msg应该就保存在iov定义的内存段中,即msg[]
struct uevent uevent;
parse_event(msg, &uevent); //解析出msg中的uevent事件
handle_device_event(&uevent); //处理添加/删除设备事件
handle_firmware_event(&uevent); //处理加载/卸载firmware事件
}
*/
}
udev&uevent之一 -- udev
最新推荐文章于 2024-05-22 17:12:40 发布