首页 > 编程知识 正文

热插拔保护电路,可以实现热插拔的硬件

时间:2023-05-04 15:48:39 阅读:46421 作者:764

设备节点的创建是在sysfs接口上分析dev文档以获取设备节点号。 这很明显。 那么,udevd通过什么机制知道内核中模块的变化情况,如何知道设备的插入和删除情况呢? 当然通过热插件机制,但是热插件是怎么实现的呢? 内核是如何通知用户空间发生了事件的呢? 答案是通过网络套接字通信在内核和用户空间之间传递信息。 内核调用Kobject_uevent函数将netlink消息发送到用户空间。 通常,这部分工作不需要自己处理。 集成设备型号在子系统级别处理这部分代码。 这包括在创建和删除与设备相对应的特定kobject时发送相应的添加和移除消息。 当然前提是内核配置了kobject。netlink socket作为内核与用户空间的通信方式,不仅应用于热插件机制,还应用于许多其他真正与网络相关的内核子系统。 Udevd使用标准套接字机制创建套接字连接,以获取和解析内核广播的uevent事件

Udevtrigger的工作原理运行udevd后,使用Udevtrigger时,会为内核中已存在的设备创建节点,这是如何实现的呢? 分析udevtrigger代码时,udevtrigger会通过在/sysfs文档系统下的现有设备的事件节点中写入字符串“添加”来触发事件,从而使udevd 因此,也可以手动在命令行上模拟此过程。/# echo ' add '/sys/block/MTD block2/uevent/# # uevent [ 178.415520 ] add/block/MTD block2()。 无论在uevent上写什么,都会发生添加事件。 从kernel内部uevent属性的实现函数可以看出,缺省实现是static ssize _ t store _ uevent (结构设备* dev,结构设备) 返回计数; },因此,无论写的内容是什么,都会诱发add操作。 很遗憾,我还想用这个属性实验remove的操作。 我不知道这样限制的理由是什么。 另一方面,udevstart的实现方法与udevtrigger不同。 他基本上通过重复实现udevd中的机制并遍历sysfs,自己完成设备节点的创建,而不通过udevd完成。 当udevd创建每个节点时,fork会提出一个新过程,单独完成创建此节点的任务。 Uevent_seqnum用于标识当前uevent事件的序列号。 要显示$ cat/sys/kernel/uevent _ seqnum 2673,请执行以下操作

udev的工作原理如果系统内核检测到硬件设备已安装或卸载,内核将运行热插头以安装或卸载硬件驱动程序。 hotplug处理硬件驱动程序后,调用udevd的运行,以便udevd可以生成或删除硬件设备文件。 然后,udevd在libsysfs中读取sys文件系统并获取硬件设备的信息。 然后,向namedev查询外部设备的设备文件信息,包括文件的名称、权限等。 最后,udevd基于上述结果,在/dev/目录中自动创建该外部设备的设备文件,并且在/etc/udev/rules.d下检查该设备是否具有使用权限

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。