Linux驱动之设备模型(1)

使用cat echo控制linux字节型硬件 使用adb 直接控制android手机的 硬件,通过cat显示字节型硬件节点的内容,通过echo 来修改对应的值,直接修改对应的硬件。对调试很有帮助。 立即下载

1.Overview

l  设备模型是2.6内核引入的新特性,提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构,使得系统具有以下优点:

n  代码重复最小化

n  提供诸如引用计数这样的统一机制

n  可以列举系统中所有的设备,观察它们的状态,并查看它们连接的总线

n  可以将系统中的全部设备结构以树的形式完整、有效地展现出来

n  可以将设备和其对应的驱动联系起来,反之亦然

n  可以将设备按照类型加以归类,比如归类为输入设备,而无需理解物理设备的拓扑结构

n  可以沿设备树的叶子向其根的方向依次遍历,以保证能以正确顺序关闭个设备的电源

最后一点是实现设备模型的最初动机。

 

l  作为Linux驱动工程师,掌握设备模型是非常必要的。掌握了设备驱动模型,再去阅读内核源码,发现自己会在一个更高的高度阅读代码。

 

2.  kobject

2.1  overview

设备模型的核心部分就是kobject(kernel object),由struct kobject结构体表示,在sysfs中表现为一个目录。

 

2.2  kobject结构体

l  Kobject是组成设备模型的基本结构,通常嵌入到其它结构体中,这样就可以通过kobject来访问该结构体

struct kobject {

         const char                  *name;    /* kobject名称 */

         struct list_head        entry;     /* 用于链入所属的kset的链表 */

         struct kobject           *parent;   /* 指向kobject的父对象 */

         struct kset                 *kset;     /* 所属kset */

         struct kobj_type       *ktype;   /* 所属ktype */

         struct sysfs_dirent  *sd;      /* sysfs中的目录项 */

         struct kref                  kref;       /* 提供引用计数 */

         unsigned intstate_initialized:1;  /* 标志:初始化 */

         unsigned intstate_in_sysfs:1;   /* 标志:在sysfs中 */

         unsigned intstate_add_uevent_sent:1;     /* 标志:已发出KOBJ_ADDuevent */

         unsigned intstate_remove_uevent_sent:1;/* 标志:已发出KOBJ_REMOVE uevent */

         unsigned intuevent_suppress:1;     /* 标志:禁止发出uevent*/

};

 

2.3  kobject的基本操作

Kobject操作函数实现在kobject.c文件中,这里介绍常用的几个

l  初始化

voidkobject_init(struct kobject *kobj, struct kobj_type *ktype)

l  Kobject添加,在sysfs产生一个目录

intkobject_add(struct kobject *kobj, struct kobject *parent,

                   constchar *fmt, ...)

l  初始化和添加

intkobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,

                             struct kobject *parent, const char *fmt, ...)

l  创建和添加

struct kobject *kobject_create_and_add(const char *name,struct kobject *parent)

l  删除

void kobject_del(struct kobject *kobj)

l  引用数加一

struct kobject*kobject_get(struct kobject *kobj)

l  引用数减一,当引用计数减到0时,会调用release函数进行销毁工作

voidkobject_put(struct kobject *kobj)

 

2.3  实例解析

创建一个kobject,并建立一个属性文件

/*

*       forlearn kobject

*/

#include <linux/module.h>

#include <linux/init.h>

#include <linux/kobject.h>

#include <linux/sysfs.h>

#include <linux/string.h>

 

static int n = 6;

/* 当用户空间读取属性文件时,有调用到此方法把指定的值编码后放入缓冲区 */

static ssize_t sc_show(struct kobject*kobj,

                            structkobj_attribute *attr, char *buf)

{

         returnsprintf(buf, "%d\n", n);

}

/* 当用户空间写入属性文件时,有调用到此方法把指定的值解码后放入传递给相应变量 */

static ssize_t sc_store(struct kobject*kobj,

                            structkobj_attribute *attr, const char *buf, size_t count)

{

         sscanf(buf,"%du", &n);

         returncount;

}

 

/* 构建kobject的属性 */

static struct kobj_attribute sc_attrb =

         __ATTR(sc_example,0666, sc_show, sc_store);

 

static struct kobject *kobj;

 

static int __init example_init(void)

{

         intret;

 

         /*create kobject, a dir(kobj_example) in sys/ */

         kobj= kobject_create_and_add("kobj_example", NULL);

         if(!kobj)

                   return- ENOMEM;

        

         /*create a attribute file(sc_example) in kobj_example */

         ret= sysfs_create_file(kobj, &sc_attrb.attr);

         if(ret)

                   gotoattr_file_failed;

         return0;

        

attr_file_failed:

         kobject_put(kobj);

         returnret;

}

 

static void __exit example_exit(void)

{

         sysfs_remove_file(kobj,&sc_attrb.attr);

         kobject_put(kobj);

}

 

module_init(example_init);

module_exit(example_exit);

 

MODULE_LICENSE("Dual BSD/GPL");

MODULE_AUTHOR("CJOK<cjok.liao@gmail.com>");

 

试验结果:



Linux总线、设备和驱动模型 宋宝华 - Linux总线、设备和驱动模型的详细讲座的ppt分享。 立即下载

相关推荐

利用ArcMap实现遥感图像语义分割标注的完整流程解析

本文详细解析了利用ArcMap进行遥感图像语义分割标注的完整工作流。从工程创建、数据导入、SHP文件创建,到实战勾画地物、要素转栅格,再到最终的裁剪对齐,提供了每一步的关键操作与避坑指南。该方法特别适合处理大尺寸、带地理坐标的遥感影像,能高效产出精准对齐的图像-标签对,为后续深度学习模型训练奠定可靠的数据基础。

gpu4optimizer的博客 1216

Linux | Linux 驱动模型(1)

Linux 核心开发团队在开发2.5内核的过程中,引入了Linux驱动模型(Linux Driver Model),有时也被称为Linux设备模型(Linux Device Model),主要的目的是解决之前版本存在的以下问题:没有一种统一的机制表达驱动和设备之间的关系;没有通用的热插拔机制;没有通用的电源管理机制;procfs文件系统过度混乱,包含了许多不是进程的信息。Linux内核基于kobj...

marlos的博客 336

同花顺客户端数据采集:Hook注入与内存解密实战

在金融量化领域,客户端数据采集是获取低延迟、高精度行情的关键技术路径。其底层涉及进程通信、内存加密、反调试等典型Windows逆向工程问题。理解API Hook原理与AES-CBC动态密钥派生机制,有助于突破传统HTTP爬虫在国产金融软件中的失效困境。该技术不依赖网络劫持,而聚焦于本地进程内函数拦截与运行时内存解析,具备离线、可控、合规等工程优势,广泛应用于Level2行情、逐笔委托、分笔成交等高频数据场景,是量化基础设施中‘端侧数据主权’的重要实现方式。

weixin_30496999的博客 856

深入linux设备驱动程序内核机制(第九章) 读书笔记

第9章 linux设备驱动模型        本文欢迎转载, 请标明出处        本文出处: http://blog.youkuaiyun.com/dyron 9.1 sysfs文件系统          sysfs文件系统可以取代ioctl的功能.     sysfs文件系统的初始化发生在linux系统的启动阶段: int __init sysfs_init(voi

随风 2431

走马观碑组智能车竞赛:目标板识别算法优化与实战技巧(基于OpenCV)

本文针对智能车竞赛走马观碑组别的核心挑战,深入探讨了基于OpenCV的目标板识别算法优化与实战技巧。文章系统分析了PVC赛道环境下的光照、运动模糊等干扰因素,详细拆解了从红色矩形定位、透视校正到特征提取与分类的完整流程,并提供了工程优化、速度提升及现场调试的实用策略,旨在帮助参赛队伍构建一套在高速运动中既准又快的鲁棒识别系统。

life6的博客 733

自定义串口通讯协议

自定义串口通讯协议的实现方法

qq_44826038的博客 2172

Linux设备模型基础---数据结构

struct kobject {   const char *name;   struct list_head entry;   struct kobject *parent;   struct kset *kset;   struct kobj_type *ktype;   struct sysfs_dire

uyiwfn的专栏 500

昇腾NPU实战:PaddleSpeech语音模型高效部署与性能优化指南

本文详细介绍了如何在华为昇腾NPU上高效部署PaddleSpeech语音识别模型。通过使用官方Docker镜像、解决依赖冲突、修改源码适配NPU算子,并应用混合精度与批处理等优化技巧,实现模型在昇腾平台上的稳定运行与性能提升,为AI语音应用提供高性价比的国产硬件部署方案。

weixin_29214691的博客 181

Linux内核(linux-5.2.9)--内核对象(类型无关的双循环链表)

前一段时间学习了Linux源码,过程比较艰辛。虽说工作中也不会去开发操作系统,但“他山之石可以攻玉”,其中的设计思想和解决方案还是可以参考的嘛。抽空陆续把所学的模块整理一下,方便后面及时参阅,温故知新。 内核对象是一种统称,驱动、设备、总线类型等都可以看作是内核对象。表示内核对象的结构是kobject,相当于Linux驱动模型的“基类”。kobject的定义如下(...

其疾如风 其徐如林 侵略如火 不动如山 1284

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 303

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2205

kobject

转载自:http://www.360doc.com/content/13/0626/15/12892305_295670482.shtml       在linux的驱动表示中,主要有三个基本的结构,分别是kobject,kset,ktype.Kobject,kset,kypte这三个结构是设备模型中的下层架构。模型中的每一个元素都对应一个kobject.kset和ktype可以看成是kobje

漫不经心 6952

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

2.1 Linux驱动设备模型

非markdown版本Linux设备模型大概是最难的linux知识点之一了。晦涩难懂的kobject、kset概念,云里雾里的sys文件系统层次,搞得你不知所云。下面我们就尝试对这块硬骨头进行剖析。

pwl999的博客 2123

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

linux常用驱动模型,LINUX 驱动学习之路 -设备模型之我理解(1)

前言作为开头篇,我不想写HELLLOWORLD驱动,甚至字符设备驱动的开发,这样文章充斥在各大网站上的博客上,随便搜搜,就可以找到几百篇。这是最基本的东西,通过这些内容的学习,我们要掌握LINUX驱动的基本要素,比如初始化函数,退初函数,以及去理解简单的驱动的MAKEFILE的编写,推荐去看LDD,这方面有比较详细的叙述。但是我的理解,即使我们会写这些东西,对我们的工作也没有太大的用处,如果你深入...

weixin_30653091的博客 222

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

linux驱动编程--设备模型1

 最近学习设备模型的运行机制,进过书上和网上资料的训练,貌似已经修改出了自己的网络权值,所以写了下来并整理一下自己的思路。 之前的驱动程序由于硬件信息和逻辑操作是写在一起的,所以一个驱动只能适应一种平台。为了提高驱动程序的可移植性,就引出了设备模型。 那么现在面临的问题是:设备模型是怎么工作的?

深蓝的专栏 1122

Linux驱动之设备模型(1) .

1.Overview l  设备模型是2.6内核引入的新特性,提供了一个一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构,使得系统具有以下优点: n  代码重复最小化 n  提供诸如引用计数这样的统一机制 n  可以列举系统中所有的设备,观察它们的状态,并查看它们连接的总线 n  可以将系统中的全部设备结构以树的形式完整、有效地展现出来 n  可以将设备和其对应的驱动联系起来,

zhuxw技术博客 620

linux设备驱动学习(11) linux设备模型1

引自http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94312    以《LDD3》的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的。但是我个人认为:对于一个嵌入式L

847

linux驱动学习---设备模型别人的理解(1)

前言 作为开头篇,我不想写HELLLOWORLD驱动,甚至字符设备驱动的开发,这样文章充斥在各大网站上的博客上,随便搜搜,就可以找到几百篇。这是最基本的东西,通过这些内容的学习,我们要掌握LINUX驱动的基本要素,比如初始化函数,退初函数,以及去理解简单的驱动的MAKE FILE的编写,推荐去看LDD,这方面有比较详细的叙述。 但是我的理解,即使我们会写这些东西,对我们的工作也没有太大的用处,如

ray5wang的博客 423

【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析

一、linux统一设备模型的组成 二、USB描述符四大描述符 三、USB如何进行一步一步枚举的呢? 四、input设备生成过程 五、linux usb子系统---通信

皮皮不调皮的博客 1394
上一篇: file_operations数据结构分析
下一篇: Linux驱动之设备模型(2)
asmxpl
博客等级 码龄15年 9粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值