• 《Linux设备驱动开发详解》之udev用户空间设备管理


    一 udev特点

    1 udev完全在用户态工作

    2 udev利用设备加入或移除时内核所发送的热插拔事件来工作,在热插拔时,设备的详细信息会由内核通过netlink套接字(uevent)发送给用户空间,然后根据事先定义的udev规则,创建对应的设备文件节点。

    3 udev对冷插拔的处理:向uevent节点写“add”,触发内核重新发送netlink,之后udev就可以收到对应的uevent事件,再之后的过程同热插拔处理过程。

    二 udev简单实现

    1. #include
    2. int main(int argc, char *argv[])
    3. {
    4. struct sockaddr_nl nls;
    5. struct pollfd pfd;
    6. char buf[512];
    7. memset(&nls, 0, sizeof(struct sockaddr_nl));
    8. nls.nl_family = AF_NETLINK;
    9. nls.nl_pid = getpid();
    10. nls.nl_groups = -1;
    11. pfd.events = POLLIN;
    12. pfd.fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
    13. if (pfd.fd == -1)
    14. return -1;
    15. if(bind(pfd.fd, (void *)&nls, sizeof(struct sockaddr_nl)))
    16. return -1;
    17. while(-1 != poll(&pfd, 1, -1)) {
    18. int i;
    19. int len = recv(pfd.fd, buf, sizeof(buf), MSG_DONTWAIT);
    20. if (len == -1)
    21. return -1;
    22. i = 0;
    23. while(i < len) {
    24. printf("%s\n", buf + i);
    25. i += strlen(buf + i) + 1;
    26. }
    27. }
    28. return 0;
    29. }

    三 udev工作过程

    1)当内核检测到系统中出现了新设备后,内核会通过netlink套接字发送uevent

    2)udev获取到内核发送的信息,进行规则匹配

    四 udev规则文件

    1)匹配关键字

    ACTION:行动

    KERNEL:内核设备名

    BUS:总线类型

    SUBSYSTEM:子系统名

    ATTR:属性

    2)赋值关键字

    NAME:创建的设备文件节点名

    SYMLINK:符号创建链接名

    OWNER:设备的所有者

    GROUP:设备所属组

    IMPORT:调用的外部程序

    MODE:节点访问权限

    3)udev规则写法

    在匹配部分,可以通过*, ?, [a - z], [1 - 9]等shell通配符来匹配多个设备

    五 udev变体

    嵌入式:mdev,位于busybox中

    Android:vold

    参考文档:《Linux设备驱动程序开发详解》基于最新的Linux 4.0内核

  • 相关阅读:
    springboot+微信小程序基于微信小程序的宿舍管理系统
    信用VS抵押:贷款的两面镜子
    家用电脑可以用做服务器吗
    加快网站收录 3小时百度收录新站方法
    Java如何使用实时流式计算处理?
    Linux安装Kibana详细教程
    代码 Revert 后再次 Merge 会丢失的问题,已解决
    这款吊打Chrome、Edge的浏览器,时隔573天再度更新
    Android JNI HIDL 简单实例学习
    ARM术语
  • 原文地址:https://blog.csdn.net/yxw0609131056/article/details/126763292