• 自动创建设备结点:udev机制的实现过程



    什么是udev?

            Linux系统中,/dev目录是用来存放设备文件的,每个文件指向一个系统设备文件,用户的程序可以通过使用这些文件来对真实硬件进行设备操作,但是在2.4内核时代,/dev下保存了所有kernel可以支持的硬件设备的设备文件,总计有近一万多个,而这些设备的大多数都是没有链接的设备,这样就极大的浪费了系统资源,而且/dev目录也显得十分混乱,而udev就是解决这些问题的,udev可以对/dev目录进行管理,动态的建立和删除设备文件,当设备链接系统时,udev自动建立相应的设备文件,而在断开时,会自动删除相应的设备文件,这样能够使/dev目录更加简洁,而且udev还可以运行用户编写命名规则,为不同设备编写文件名,这样可以更加方便的对设备进行管理

    mdev和udev的区别

            mdev是busybox自带的一个简化版的udev,常用于一些嵌入式的操作系统中
            udev是自动创建设备结点的机制,创建设备结点的逻辑在用户空间

    udev的工作原理

            在系统内核中有设备进行添加或者删除设备时,系统内核在检测到之后会生成一个hotplug event,并查找hotplug中的设备程序,若udev已经启动,内核会通知udev进程进行查询设备结点的相关信息并创建结点

    udev的相关api及其用途

    1. 引用库:#include<linux/device.h>
    2. 1.向上提交目录信息
    3. struct class * class_create(struct module *owner,const char *name );
    4. 功能:申请一个设备类并初始化,向上提交目录信息
    5. 参数:
    6. owner:指向当前内核模块自身的一个模块指针,填写THIS_MODULE
    7. name:向上提交的目录名
    8. 返回值:成功返回申请的struct class对象空间首地址,失败返回错误码指针
    9. 2.销毁目录
    10. void class_destroy(struct class *cls)
    11. 功能:销毁目录信息
    12. 参数:cls:指向class对象的指针
    13. 返回值:无
    14. 3.向上提交节点信息
    15. struct device *device_create(struct class *class, struct device *parent,
    16. dev_t devt, void *drvdata, const char *fmt, ...)
    17. 功能:创建一个设备对象,向上提交设备节点信息
    18. 参数:
    19. cls:向上提交目录时的到的类对象指针
    20. parent:当前申请的对象前一个节点的地址,不知道就填 NULL
    21. devt:设备号 主设备号<<20|次设备号
    22. /*
    23. MKDEV(主设备号,次设备号):根据主设备号和次设备号得到设备号
    24. MAJOR(dev):根据设备号获取主设备号
    25. MINOR(dev):根据设备号获取次设备号
    26. */
    27. dridata:申请的device对象的私有数据,填写NULL
    28. fmt:向上提交的设备节点名
    29. ...:不定长参数
    30. 返回值:成功返回申请到的device对象首地址,失败返回错误码指针,指向4K预留空间
    31. 4.销毁设备节点信息
    32. void device_destroy(struct class *class, dev_t devt)
    33. 功能:销毁设备节点信息
    34. 参数:
    35. class:向上提交目录时得到的类对象指针
    36. devt:向上提交设备节点信息时提交的设备号
    37. 返回值:无

  • 相关阅读:
    LLM 大模型学习必知必会系列(三):LLM和多模态模型高效推理实践
    Unity技术手册-UGUI零基础详细教程-Button按钮
    小任务:简单实现银行业务系统(附 ideal编辑器固定序列化版本方法)
    深分页问题,mysql查询 limit 1000,10 和limit 10 一样快吗?
    第147篇 笔记-预言机(Oracle)
    JavaScript进阶(二十九): 走近 es6 之 new.target
    Git:撤销 commit 提交或撤销对远程仓库的push操作
    Python 全栈系列183 元数据的规划与命名
    Mac命令查询硬件信息
    【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式 - mv-expand
  • 原文地址:https://blog.csdn.net/m0_62707396/article/details/132839816