Linux设备驱动模型(二)

news2024/9/20 15:37:04

基于linux-3.14.16
设备模型(LDM)包括,总线、驱动、设备

一、总线及其api

在这里插入图片描述

1、注册一个总线

以i2c总线为例,下面基本表现出了注册一个总线的过程。
1、定义一个总线bus_type,填充几个回调
2、调用bus_register注册总线
在这里插入图片描述

二、驱动及其api

在这里插入图片描述

1、注册驱动的过程

driver_register注册一个总线驱动
在这里插入图片描述
总线驱动加入总线
在这里插入图片描述
这个应该是跟热插拔事件有关
在这里插入图片描述

1)bus_add_driver

下面我们看下,总线驱动是怎么加入到总线的,以及要做的一些处理
如果没有总线,直接返回,不处理总线相关的
在这里插入图片描述
以下为是总线驱动的处理,先分配一个驱动的私有数据,可以理解为总线驱动的组合对象
在这里插入图片描述
将总线驱动加入到总线的驱动列表,并处理总线上的设备匹配
在这里插入图片描述
后面看看driver_attach是怎么做的总线匹配的

1)driver_attach

在这里插入图片描述
bus_for_each_dev是对每个总线上设备去执行回调处理,直接看回调__driver_attach干了什么

首先去是调用总线设置的match回调函数,处理总线设备和驱动,看是否匹配
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
调用了really_probe,看really_probe做了什么,如果bus有probe,执行,否则执行总线驱动的probe
在这里插入图片描述
这里我们了解了总线驱动的注册过程,一般我们在自定义总线的时候,会封装一个注册总线驱动的接口,这个接口最终会调用driver_register

二、设备及其api

在这里插入图片描述

1、注册设备的过程

在这里插入图片描述
最终调用device_add,看看device_add干了什么
添加设备对象到驱动模型
在这里插入图片描述
总线设备的一些处理,设备如果属于某个总线,将会做这些处理,
1、将设备加到总线的设备链表,创建一些文件
2、产生热插拔事件
3、检查执行probe,表面是probe,但里面做了一些工作,具体分析
在这里插入图片描述
在这里插入图片描述

1、总线设备的匹配工作bus_probe_device

如果设备属于某个总线,将会执行bus_probe_device
没有bus,直接返回了
在这里插入图片描述
在这里插入图片描述

2、device_attach

如果设备没有匹配的驱动,就遍历总线的驱动链表,执行回调__device_attach
在这里插入图片描述
我们看看 __device_attach做了什么
在这里插入图片描述
匹配成功了就接着执行probe,否则跳过这个驱动
在这里插入图片描述
可以看到,匹配最终是调用总线的match回调函数完成的
在这里插入图片描述
probe最终会调用到really_probe,最终会调用总线的probe或者驱动的probe,之前我们在总线驱动那一节分析过。

同样的,我们在自定义总线的时候,一般实现注册总线设备的接口,这个接口最终也会调用到device_register来实现设备添加。总线设备也会在device上面做扩展。


参考i2c总线,以助理解,总线、驱动和设备的关系

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

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

相关文章

【STM32系列】硬件介绍及固件安装

【STM32系列】硬件介绍及固件安装 硬件介绍应用领域 固件安装进入DFU模式安装固件退出DFU,进入U盘模式 演讲稿 欢迎收看由咸鱼菌工作室出品的STM32系列教程。本篇内容主要是设备介绍及环境安装 硬件介绍 本系列所选硬件ZTMR(STM32)开发板 ,选用STM32芯片…

新手如何学习挖SRC漏洞?【网络安全】

前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…

【ProtoBuf】1.初识ProtoBuf

————————————每一个不曾起舞的日子都是对生命的辜负。 初识ProtoBuf 一. 序列化概念二. ProtoBuf1. 什么是ProtoBuf2. ProtoBuf的特点3. ProtoBuf进行序列化反序列化的流程 三. 本章总结 一. 序列化概念 日常生活中,手机上收到的语音消息在网络中不能直…

多线技术:TDI时间延迟积分

多线技术:TDI时间延迟积分 在比较暗的环境下拍照,清晰成像的条件,是CMOS芯片获取足够的光。而获得足够光的方法有: 方案1.增加单位时间的光照强度(光源、大镜头收集光) 方案2.增加CMOS感光时长&#xf…

国潮还能怎么玩?小红书用户画像速看!

所谓“国潮”,概括来说就是“国风潮流”。主要有两层含义:其一,有中国文化和传统的基因;其二,能将传统文化与时下潮流相融合,使产品更具时尚感。在“国潮”元年之前,“国潮”大多指狭义上的特定…

macOS Ventura 13.5beta (22G5027e)发布

系统介绍 黑果魏叔 5 月 20 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 更新(内部版本号:22G5027e),本次更新距离上次发布隔了 17 天。 macOS Ventura 带来了台前调度、连续互通相机、Face…

四象限法进程调度

周二收到一篇推送 一次云上网络毫秒级的优化与实践,很有意义的实践和探索,建议阅读,文章不长,没有冗长的源码分析,结论很清晰。 谈谈我的看法。 多少有种感觉,Linux 越来越像个响应系统而不是服务器。 虚…

TimesNet:用于一般时间序列分析的时间二维变化模型(代码解析)

前言 TimesNet:用于一般时间序列分析的时间二维变化模型论文下载地址,Github项目地址,论文解读系列本文针对TimesNet模型参数与模型架构开源代码进行讲解,本人水平有限,若出现解读错误,欢迎指出开源代码中…

回归分析-简单线性回归推导

回归分析-简单线性回归模型 在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因…

浏览器免费安装ChatGPT插件与国内免费ChatGPT分享

文章目录 一、什么是ChatGPT?ChatGPT的功能: 二、如果在Edge上安装chatgpt插件三、国内免费ChatGPT四、ChatGPT程序员的影响五、Chatgp能取代程序员吗? 一、什么是ChatGPT? ChatGPT是一种基于自然语言处理的机器学习算法&#xf…

【牛客刷题】 选择题整理day3~day4

在知识的海洋里彻底疯狂!!! 文章目录 1. try-catch-finally2. 方法调用3. 接口4. 1. try-catch-finally try-catch-finally的执行机制是 try块是不能被省略的,用于包含可能会抛出异常的代码,如果没有try块&#xff0c…

Linux之DNAT策略及应用与tcpdump抓包

目录 一、DNAT的介绍 二、DNAT实验设计 三、DNAT具体实验步骤操作 第一步:配置好网卡与环境 第二步:web服务器安装httpd服务,且开启httpd服务 第三步:对网关服务器进行操作 1.设置路由转发 2.设置SNAT 四、tcpdump抓包工具…

yooasset+hybridclr在android,ios端热更新测试

Hybridclr+YooAsset+Unity Run android+iOS 这个工程是用来学习YooAsset和Hybridcl,来做unity资源和代码热更新, 实现了android 和ios 双端,跑通。 源码在文章最后。 版本 很新的版本 用到的YooAsset 1.4.13 用到的HybridCLR 2.4.2 yooAsset git网址 https://github.co…

CVTE C++软开全程面试(一面、二面、群面、HR面)

一面,面了一个钟,问了很多问题,大部分是计算机的基础知识,我也只能记录下一部分。 C的继承问题,protected成员被public、protected和private继承的情况。 下面是关于protected成员在不同类型继承中的访问权限&#xff…

声音合成——Foley Sound——DECASE项目——多模态智能感知与应用——论文翻译

文章目录 概述论文翻译CONDITIONAL SOUND GENERATION USING NEURAL DISCRETE TIME-FREQUENCY REPRESENTATION LEARNINGAbstractSampleRNN是啥? Introduction个人总结(省流)补充个人感想 Approach2.1 Discrete time-frequency省流总结2.1.1 Mu…

http2

HTTP: HTTP/2 - High Performance Browser Networking (OReilly) 以下内容都是上面这篇文章的一些总结(或者说翻译hiahia) http2是由谷歌的SPDY之上演变而来的。主要涉及的技术包括: 头部压缩,多路复用,请求优先级 …

使用Docker Dockerfile构建php LNMP集成开发环境,并运行Thinkphp5

宿主机环境 系统:MAC、Windows10 Docker版本:Docker version 23.0.5 Docker Desktop:Dockerdesktop官方地址 前言 这篇主要介绍如何在Mac、Windows10使用docker搭建LNMP集成开发环境。下面我会写Dockerfile编译安装Nginxphp基础环境。mysql、redis基…

多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量时间序列预测

多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测 目录 多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 多维时序 | MATLAB实现基于贝叶斯线…

Rocky Linux 8.8 发布 - CentOS 的权威替代

Rocky Linux 8.8 发布 - CentOS 的权威替代 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接:https://sysin.org/blog/rocky-linux-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 以…

Linux-Shell编程

一,shell编程的概念 1.0Shell与内核的关系 内核是Linux系统的核心,它是操作系统的最底层部分,负责管理计算机的硬件资源,例如CPU、内存、磁盘等。内核还提供了许多系统调用,供应用程序使用,例如打开文件、…