首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux驱动:你应该先了解驱动模型

[导读] Linux设备林林总总,嵌入式开发一个绕不开的话题就是设备驱动开发,在做具体设备驱动开发之前,有必要对Linux设驱动模型有一个相对清晰的认识,将会帮助驱动开发,明白具体驱动接口操作符相应都做些什么...注:代码分析基于linux-5.4.31 为啥要驱动模型 随着系统结构演化越来越复杂,Linux内核对设备描述衍生出一般性的抽象描述,形成一个分层体系结构,从而引入了设备驱动模型。.../include/linux/Kobject.h中定义了隐藏在后台的类似于基类的数据结构: kset:可以认为是kobject的顶层容器类。...每个kset内部都包含了自己的kobject. kobject:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它的可见表述,每一个 kobject 对应 文件系统 /sys...比如所有的网络接口都位于/sys/class/net下 struct subsys_private *p描述类链表 kobject/kset kobject类似于面向对象中的内核基类,内核利用它将各个对象连接起来组成分层的机构体系

3.2K10

Linux设备驱动模型-Uevent

Linux系统对uevent机制的具体实现是建立在设备模型的基础上的,通过kobject_uevent函数实现。 在前面的kset小节中提到了注册一个kset的接口,可以在这里习复下。...kobject_uevent(&k->kobj, KOBJ_ADD); return 0; } 可以看到这里调用了kobject_uevent接口,发送一个action为: KOBJ_ADD的事件。...而kobject和kset的主要区别就是,将一个kset注册到系统的时候,就需要将此事件通过kobject_uevent发送到用户空间,而kobject如果是单独的,没有依赖kset,则无法通过uevent...with success or the * corresponding error when it fails. */ int kobject_uevent(struct kobject *kobj...struct kobject *kobj, enum kobject_action action, char *envp_ext[]) { struct kobj_uevent_env

4K41

udev实现热插拔

Udev是一个针对Linux内核2.6的可提供自动创建的设备节点和命名的解决方法的一个文件系统;其实与/etc/目录下的fstab文件类似 二、Udev如何获取内核这些模块的变化信息?...新的Linux内核使用udev代替了hotplug作为热拔插管理,虽然有udevd管理热拔插,但有时候我们还是需要在应用程序中检测热拔插事件以便快速地处理,比如在读写SD卡的时候拔下SD卡,那么需要立即检测出该情况..., 1, NULL, NULL, THIS_MODULE); 当有事件发生的时候,调用 kobject_uevent()函数,实际上最终是调用 netlink_broadcast_filtered(uevent_sock...types.h> 7 //该头文件需要放在netlink.h前面防止编译出现__kernel_sa_family未定义 8 #include 9 #include <linux...接着就绑定该文件描述符到sockadd_nl,注意该结构体nl_groups是接收掩码,取~0是将接收所有来自内核的消息,我们接收热拔插只需要NETLINK_KOBJECT_UEVENT即可。

2.7K50

性能功耗专题 | 深入浅出理解Power Supply

Android供电系统框架 power supply(以下简称psy)是Linux中从供电驱动抽象出来的子系统,是Linux电源管理的重要组成部分。...power supply子系统简介 概述 psy子系统的基础是建立在设备驱动模型之上的,主要运用了其中的class、device、kobject、sysfs、uevent相关知识,也是驱动设备模型的一个具体应用...相关结构体 psy相关的定义在/include/linux/power_supply.h。...跟踪这一调用流程可以在驱动中实现的get_property函数增加调用栈打印: 可以看到,在kobject_uevent_env函数中调用对应kset的uevent,会去遍历每一个属性节点(dev_uevent...值得注意的是,使用uevent-netlink机制传递的字符串并不会包含psy属性节点的kobject_uevent_env键值对状态。

1.8K52
领券