总线设备驱动框架

1.platform_device:修改设备树,添加设备(device)节点,设备树节点部分会被转换为 platform_device。

2.platform_driver:

        首先定义入口,出口函数;构建platform_driver结构体;在入口函数注册platform_driver(采用platform_driver_register()函数),卸载驱动程序时,就会去调用这个出口函数;

        构建file_operations结构体为APP层提供open,read等函数接口。

        在platform_driver.probe里面注册file_operations。

3.platform_device与platform_driver如何匹配(一般方法):

        使用设备树信息来判断 dev 和 drv 是否配对:

        如果 of_match_table 中含有 compatible 值,就跟 dev 的 compatile 属性比较,若一致则成功,否则返回失败;

eg:

//设备树
#define GROUP_PIN(g,p) ((g<<16) | (p))/ {100ask_led@0 {compatible = "sym,leddrv";pin = <GROUP_PIN(3, 1)>;};100ask_led@1 {compatible = "sym,leddrv";pin = <GROUP_PIN(5, 8)>;};};//驱动static struct platform_driver chip_demo_gpio_driver = {.probe      = chip_demo_gpio_probe,.remove     = chip_demo_gpio_remove,.driver     = {.name   = "100ask_led", /*这个对应的就是dts文件里面的名字*/ .of_match_table = sym_leds,  },
};
static const struct of_device_id sym_leds[] = {{ .compatible = "sym,leddrv" },{ },
};

        PS:

       1. 没有转换为 platform_device 的节点,如何使用呢设备树里面定义的信息呢?

        任意驱动程序里,都可以采用操作设备树的常用函数直接访问设备树,从而获得我们想要的节点数据。

        2.platform总线的匹配规则是什么?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?
        总线,设备,驱动。匹配规则就是当有一个新的设备挂起时,总线被唤醒,match函数被调用,用device名字去跟本总线下的所有驱动名字去比较。相反就是用驱动的名字去device链表中和所有device的名字比较。如果匹配上,才会调用驱动中的probe函数,否则不调用。至于先后顺序,鉴于个人理解,不会有影响,不管谁先谁后,bus都会完成匹配工作。

       3. 设备线驱动模型的出现主要有三个好处,设备与驱动分离,驱动可移植性增强;设备驱动抽象结构以总线结构表示看起来更加清晰明了,谁是属于哪一条bus的;最后,就是大家最熟悉的热插拔了,设备与驱动分离,很好的奠定了热插拔机制。

      4. 注意: 所谓的platform_device并不是与字符设备、块设备和网络设备并列的概念,而是Linux系统提供的一种附加手段,例如,把内部集成的I2C、RTC、SPI、LCD、看门狗等控制器都归纳为platform_device,而它们本身就是字符设备。我们要记住,platform驱动只是在字符设备驱动外套一层platform_driver的外壳。引入platform模型符合Linux设备模型――总线、设备、驱动,设备模型中配套的sysfs节点都可以用,方便我们的开发;当然你也可以选择不用,不过就失去了一些platform带来的便利。

       5.设备号

        register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)

 具体可以看register_chrdev()内部实现。

        第一个参数是主设备号,0代表动态分配,当然也可以由我们指定,第二个参数name任取。

        dev是设备号,包含有主设备号和次设备号的信息。主设备号用于区分设备的类型,次设备号用于标记相同类型的设备的不同个体。如串口1和串口2使用同一驱动程序,则其主设备号相同,但次设备号不同。Linux内核中使用dev_t类型来定义设备号,dev_t这种类型其实质为32位的unsigned int,其中高12位为主设备号,低20位为次设备号。主设备号一直的设备都使用同一个 file_operations 来操作。
        1.知道主设备号与次设备号,可通过dev_t dev = MKDEv(主设备号,次设备号)获得设号;                2.从设备号分解出主设备号:主设备号=MAJOR(dev_t dev)
        3.从设备号分解出次设备号:次设备号=MINOR(dev_t dev)

参考书籍..-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

和解费用3362万美元,谁来守护跨境卖家的“钱包”

公司向原告支付3362万美元(包括原告方主张的损害赔偿金2500万美元及原告方支付的律师费用862万美元)&#xff1b; 公司不得通过任何方式访问或使用原告的产品或数据&#xff1b; 公司不得向最终用户提供维修帮助服务(属于公司汽车诊断产品中的辅助维 修功能&#xff0c;不影响…

MTLAB 批量下载 脑医学图像数据集BrainWeb: Simulated Brain Database

MTLAB 批量下载 脑医学图像数据集BrainWeb: Simulated Brain Database BrainWeb数据集的网址&#xff1a;https://brainweb.bic.mni.mcgill.ca/brainweb/ 1. 了解 BrainWeb: Simulated Brain Database 这是一个模拟大脑数据的数据库&#xff08;SBD&#xff0c;Simulated Br…

C#重新认识笔记_ 点乘,叉乘

C#重新认识笔记_ 点积&#xff0c;叉乘 一、Dot Product 点乘&#xff1a; &#xff08;Ax*Bx&#xff09;&#xff08;Ay*By&#xff09;&#xff08;Az*Bz&#xff09;Dot Product 点积 利用点积&#xff0c;可以了解&#xff0c;两个向量(vector)的相关信息&#xff0c; …

【系统架构设计师】软件架构设计 02

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 02 软件架构设计 文章目录 系统架构设计师 - 系列文章目录 文章目录 前言 一、软件架构的概念 ★★★ 二、基于架构的软件开发 ★★★★ 三、软件架构风格 ★★★★ 1.数据流风格 2.调用/返回风格 3.独立构件风格…

python之json数据格式

json 本质上是一个字符串&#xff0c;有一些特定格式&#xff0c;且每一种编程语言偶有这种格式实现数据传输 #序列化 info{code:100,"data":1} import json data_stringjson.dumps(info) print(data_string) #{"code": 100, "data": 1} …

Qt学习--继承(并以分文件实现)

基类 & 派生类 一个类可以派生自多个类&#xff0c;这意味着&#xff0c;它可以从多个基类继承数据和函数。定义一个派生类&#xff0c;我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。 总结&#xff1a;简单来说&#xff0c;父类有的&#xff0c;子…

操作系统系列学习——信号量临界区保护

文章目录 前言信号量临界区保护 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈…

【力扣精选算法100道】——带你了解(数组模拟栈)算法

目录 &#x1f4bb;比较含退格的字符串 &#x1f388;了解题意 &#x1f388;分析题意 &#x1f6a9;栈 &#x1f6a9;数组模拟栈 &#x1f388;实现代码 844. 比较含退格的字符串 - 力扣&#xff08;LeetCode&#xff09; &#x1f4bb;比较含退格的字符串 &#x1f3…

Maven项目 快速修复log4j 漏洞

1、log4j 漏洞介绍 log4j的漏洞介绍以及原理请参考文章 &#xff0c;网址详见下面文章 Log4j漏洞原理及修复_linux log4j漏洞修复方案-CSDN博客&#xff0c;遇到这个漏洞要升级log4j 的jar包到2.17.0 以上。 2、项目快速处理方案 由于maven 管理jar 的spring 项目或者…

通过点击按钮实现查看全屏和退出全屏的效果

动态效果如图&#xff1a; 可以通过点击按钮&#xff0c;或者esc键实现全屏和退出全屏的效果 实现代码&#xff1a; <template><div class"hello"><el-button click"fullScreen()" v-if"!isFullscreen">查看全屏</el-butt…

DevExpress WinForms crack,DevExpress WinForms组件套件和库

DevExpress WinForms crack,DevExpress WinForms组件套件和库 Reporting & Analytics - Reports, Pivot Tables, PDF Viewer. The DevExpress WinForms Subscription includes royalty-free user interface components for next-gen decision support systems. Whether you…

PTA模拟+数学分析

作者 李曲 单位 浙江工业大学 生物学家发现了一种奇怪的DNA分子&#xff0c;最好用集合{A&#xff0c;B}中的N个字符序列来描述。一个不太可能的突变序列导致了一条由A‟s组成的DNA链。生物学家发现这很奇怪&#xff0c;所以他们开始更详细地研究突变。 他们发现了两种类型的…

泡澡——前缀和

题目链接&#xff1a;1.泡澡 - 蓝桥云课 (lanqiao.cn) 主要应用前缀和方法解决问题 package lanqiao;import java.util.Scanner;/*** 2023/11/29*/ public class lanqiao3898_泡澡 {static final int MAX (int) 2e5;public static void main(String[] args) {Scanner scan ne…

KY198 找最小数

描述&#xff1a; 第一行输入一个数n&#xff0c;1 < n < 1000&#xff0c;下面输入n行数据&#xff0c;每一行有两个数&#xff0c;分别是x y。输出一组x y&#xff0c;该组数据是所有数据中x最小&#xff0c;且在x相等的情况下y最小的。 输入描述&#xff1a; 输入有多…

Java网络编程:探索奥秘与实践

欢迎来到我的博客&#xff01;今天我们将一起探索Java网络编程的奥秘。网络编程是计算机科学中的一个重要领域&#xff0c;它使得不同的计算机系统可以相互通信和共享数据。Java的网络编程库提供了一套全面而强大的工具&#xff0c;让我们能够轻松地实现这些功能。我们将通过一…

【活动】政府工作报告视角下的计算机行业发展前瞻与策略探讨

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 引言正文计算机行业在政府工作报告中的定位与发展态势政策导向解析未来机遇展望…

Java中的悲观锁机制----synchronized 关键字原理

上篇铺垫&#xff1a;Java中的锁机制&#xff1f;&#xff08;体系梳理篇&#xff09;-CSDN博客 一、sychronized的介绍 sychronized是Java原生的一个同步锁机制&#xff0c;可以保证在多线程并发的情况下&#xff0c;仅允许一个线程执行加锁的方法和代码块&#xff0c;保证了…

修改multiprocessing.Manager().dict()中对象的变量的值

类 class SystemSta:def __init__(self):self.AllJointsFindedHome False创建字典 manager multiprocessing.Manager() shared_data manager.dict() shared_data[SystemSta] SystemSta()更改字典中对象的变量的值 错误示范 shared_data[SystemSta].AllJointsFindedHome…

深度剖析:数字经济下人工智能水平的新测算模型数据集

数据来源&#xff1a;企业年报时间跨度&#xff1a;1991-2022年数据范围&#xff1a;各企业数据指标&#xff1a; 年份 股票代码 公司名称 总词频 词频加1取对数 人工智能 计算机视觉 图像识别 知识图谱 智能教育 增强现实 智能政务 特征提…

数据分析-Pandas序列时间移动窗口化操作

数据分析-Pandas序列时间移动窗口化操作 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…