我正在尝试使用 Raspbian 将之前在 Ubuntu 系统上运行的应用程序移植到 Raspberry Pi。应用程序应检测到新的 USB 闪存驱动器。这是 udev 监控的完成方式:
/* Create the udev object */
udev = udev_new();
if (!udev) {
wprinterr("Can't create udev\n");
exit(EXIT_FAILURE);
}
mon = udev_monitor_new_from_netlink(udev, "udev");
if(mon==NULL) {
wprinterr("Could not create udev monitor!\n");
exit(EXIT_FAILURE);
}
if(udev_monitor_filter_add_match_subsystem_devtype(mon, "block", NULL) != 0) {
wprinterr("Could not add subsystem match to udev monitor\n");
exit(EXIT_FAILURE);
}
if(udev_monitor_enable_receiving(mon) != 0) {
wprinterr("Could not enable udev monitor receiving\n");
exit(EXIT_FAILURE);
}
while (1) {
/*
* this will block until there is a monitor event
*/
dev = udev_monitor_receive_device(mon);
if (dev) {
这在 Ubuntu 机器上运行良好。但在 Raspberry Pi 上,udev_monitor_receive_device(mon) 立即返回一个 NULL 指针。文档 ( Docu ) 说,如果出现错误情况,就会发生这种情况。Errno 设置为 11(资源暂时不可用)。但我不知道,出了什么问题。udev 守护进程正在运行顺便说一句。有人有什么想法吗?
我前段时间在树莓论坛上写了一个类似的问题,但没有得到答案,自己也找不到解决方案。所以我又把它贴在这里了。链接到 Raspberry 论坛帖子