linux 内核uevent事件,Udev 内核机制(kobject_uevent) 性能优化

本文介绍了Linux内核中Udev的kobject_uevent机制,探讨了其性能优化,包括kobject_uevent_env的调用流程、事件过滤和环境变量设置。分析了在设备添加和删除时的性能数据,并提出了优化方案,如避免不必要的/sbin/hotplug调用,以提高系统效率。
摘要由CSDN通过智能技术生成

Udev 内核机制(kobject_uevent) 性能优化

前言

这两天遇到一些 udev 的问题, 顺便阅读了一下文档(见参考文档), 基本了解了 udev

的机制。嵌入式系统性能很重要,于是对内核这一块进行了性能方面的研究。

内核大概20多处会调用了 kobject_uevent 函数发送 KOBJ_ADD / KOBJ_REMOVE

等事件。其中我们最关心的就是在device_add/device_del 中向用户空间发送设备的添加、删除信息。

kobject_uevent 直接调用 kobject_uevent_env 函数完成功能,我们先分析一下该函数的流程。

kobject_uevent_env调用流程 (内核版本 2.6.21)

kobject_uevent_env首先搜索 kobject 所属的 kset,

获得kset->uevent_ops,类型为kset_uevent_ops

(系统一共有block_uevent_ops memory_uevent_ops device_uevent_ops class_uevent_ops module_uevent_ops )这几大类

kset_uevent_ops,我们这里主要看device_uevent_ops。

如果 uevent_ops 有 filter 成员函数, 则调用该函数,

如果filter函数返回非0,则失败,结束流程。device_uevent_ops 的 filter函数为

dev_uevent_filter, 它的过滤条件为该设备的总线(bus) 或者类 (class) 非空。

为 envp分配一个大小为 32 的数组, 用于存储环境变量指针,为 buffer 分配一个大小为

2048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值