栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

uevent从内核发送到用户空间(udev)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

uevent从内核发送到用户空间(udev)

  1. 它发送称为uevent的网络链接消息。uevent只是通过netlink套接字发送的某些特殊格式的字符串。例:
        "add@/class/input/input9/mouse2    // message    ACTION=add   // action type    DEVPATH=/class/input/input9/mouse2 // path in /sys    SUBSYSTEM=input         // subsystem (class)    SEQNUM=1064  // sequence number    PHYSDEVPATH=/devices/pci0000:00/0000:00:1d.1/usb2/2­2/2­2:1.0  // device path in /sys    PHYSDEVBUS=usb       // bus    PHYSDEVDRIVER=usbhid // driver    MAJOR=13  // major number    MINOR=34",// minor number

实际发送uevent的内核函数是

kobject_uevent_env
kobject_uevent
,并且在很多地方都调用了它的包装器。

  1. 是的,udev通过从netlink套接字接收uevents来工作。但是有一个选择-内核可以调用用户模式助手。在这种情况下,内核会为每个热插拔事件生成一个进程,并为每个描述该特定热插拔事件的新进程提供环境变量。如果您看一下,

    kobject_uevent_env
    将会看到netlink消息实际上是
    #ifdef
    “ ed”的,并且默认操作是调用该用户模式助手

  2. 在理论上的netlink消息可以是广播,组播和单播,但内核发送广播消息与

    netlink_broadcast_filtered
    呼叫。无论如何,该消息都发送给了
    NETlink_KOBJECT_UEVENT
    家庭。您可以在中看到netlink套接字的创建
    uevent_net_init

  3. 回答您的评论问题。您不会

    send
    在内核中看到任何功能。
    send
    是系统调用-内核提供给用户空间的接口,但是内核本身不使用任何系统调用。从一连串的函数调用(在net / netlink / af_netlink.c和net / core / dev.c中)
    kobject_uevent_env
    到最终发送不包含任何内容
    send
    -在内核中发送skb(套接字缓冲区)就像放置缓冲区一样在队列中,然后调用调度程序以传递该缓冲区并通知正在等待syscall的用户空间
    recv



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号