当前位置: 首页 > news >正文

【梦想终会实现】Linux驱动学习5

加油加油坚持住!

1、

Linux驱动模型:驱动模型即将各模型中共有的部分抽象成C结构体。Linux2.4版本前无驱动模型的概念,每个驱动写的代码因人而异,随后为规范书写方式,发明了驱动模型,即提取公共信息组成一个个类,为添加设备和驱动提供统一的接口,使得开发变得简单化、规范化,但驱动本身仍然存在开发难度,设备(触摸屏、蓝牙等)的最底层代码不需要驱动工程师搞,Linux设备模型也不需要驱动工程师搞,驱动工程师需要做的是把二者结合。早期的驱动是需要手动inmod的,有驱动模型后直接注册即可。

驱动模型分为四类:类、总线、设备、驱动、Kobject、sysfs、udev。

深入理解Linux设备模型与驱动开发-CSDN博客 (五星推荐)

比如led,rtc,beep,key这类结构简单的设备,它们的控制不需要时序,它们没有相应的物理总线。所以linux内核不会为它们创建驱动总线。为了是这部分设备的驱动开发也能够遵循设备驱动模型,linux内核引入了一种虚拟的总线——平台总线(platform bus)。

2、Linux的底层模型(主要是写内核的人写的,搞驱动的一般不用)

基本结构体Kobject:各类对象的最小单元,对象引用计数(kref)、维护对象链表(entry、parent)、对象上锁(kset)、对用户空间的描述(ktype)。

kobj_type:提供在sysfs下的操作。attribute:sysfs下的属性;sysfs_ops:对象在sysfs下的操作方法。

kset:描述sysfs下的目录关系。

驱动开发注意包含和引用的关系,包含是结构体成员,绑定是指针。如

struct kobject {const char		*name;struct list_head	entry;   // 上下节点    包含关系struct kobject		*parent; // 上下层之间   绑定关系struct kset		*kset;       // 上锁        绑定关系struct kobj_type	*ktype;struct sysfs_dirent	*sd;struct kref		kref;        // 对象引用计数unsigned int state_initialized:1;unsigned int state_in_sysfs:1;unsigned int state_add_uevent_sent:1;unsigned int state_remove_uevent_sent:1;unsigned int uevent_suppress:1;
};

3、Linux的上层模型

device_driver是驱动程序在内核驱动框架中的抽象。

name:驱动程序的名字,用于驱动与对应设备的匹配。

probe:用于检测此设备是否可以用本驱动,毕竟不同厂家的设备对应的驱动是不同的。

内核中驱动会被类和总线双重管理。

模型思想即面向对象的思想,结构体包一层结构体即类继承类,有一个基类(device_driver),然后创建子类(usb_device)。驱动开发要有思想复杂度!一层套一层。

相关文章:

【梦想终会实现】Linux驱动学习5

加油加油坚持住! 1、 Linux驱动模型:驱动模型即将各模型中共有的部分抽象成C结构体。Linux2.4版本前无驱动模型的概念,每个驱动写的代码因人而异,随后为规范书写方式,发明了驱动模型,即提取公共信息组成一…...

Spring 核心技术解析【纯干货版】-Spring 数据访问模块 Spring-Jdbc

在 Spring 框架中,有一个重要的子项目叫做 spring-jdbc。这个模块提供了一种方 便的编程方式来访问基于 JDBC(Java数据库连接)的数据源。本篇博客将详细解析 Spring JDBC 的主要组件和用法,以帮助你更好地理解并使用这个强大的工具…...

Docker 安装详细教程(适用于CentOS 7 系统)

目录 步骤如下: 1. 卸载旧版 Docker 2. 配置 Docker 的 YUM 仓库 3. 安装 Docker 4. 启动 Docker 并验证安装 5. 配置 Docker 镜像加速 总结 前言 Docker 分为 CE 和 EE 两大版本。CE即社区版(免费,支持周期7个月)&#xf…...

Mac本地部署DeekSeek-R1下载太慢怎么办?

Ubuntu 24 本地安装DeekSeek-R1 在命令行先安装ollama curl -fsSL https://ollama.com/install.sh | sh 下载太慢,使用讯雷,mac版下载链接 https://ollama.com/download/Ollama-darwin.zip 进入网站 deepseek-r1:8b,看内存大小4G就8B模型 …...

《Angular之image loading 404》

前言: 千锤万凿出深山,烈火焚烧若等闲。 正文: 一。问题描述 页面加载图片,报错404 二。问题定位 页面需要加载图片,本地开发写成硬编码的形式请求图片资源: 然而部署到服务器上报错404 三。解决方案 正确…...

JavaScript前后端交互-AJAX/fetch

摘自千峰教育kerwin的js教程 AJAX 1、AJAX 的优势 不需要插件的支持,原生 js 就可以使用用户体验好(不需要刷新页面就可以更新数据)减轻服务端和带宽的负担缺点: 搜索引擎的支持度不够,因为数据都不在页面上&#xf…...

ZooKeeper单节点详细部署流程

ZooKeeper单节点详细部署流程 文章目录 ZooKeeper单节点详细部署流程 一.下载稳定版本**ZooKeeper**二进制安装包二.安装并启动**ZooKeeper**1.安装**ZooKeeper**2.配置并启动**ZooKeeper** ZooKeeper 版本与 JDK 兼容性3.检查启动状态4.配置环境变量 三.可视化工具管理**Zooke…...

流浪地球发动机启动问题解析与实现

目录 引言问题分析 2.1 发动机启动状态管理 2.2 手动启动与关联启动逻辑 2.3 最晚启动发动机的确定Python 实现 3.1 代码实现 3.2 <...

Java 注解使用教程

简介 Java 1.5 引入了注解&#xff0c;现在它在 Java EE 框架&#xff08;如 Hibernate、Jersey 和 Spring &#xff09;中被大量使用。Java 注释是该语言的一个强大特性&#xff0c;用于向 Java 代码中添加元数据。它们不直接影响程序逻辑&#xff0c;但可以由工具、库或框架…...

网络安全学习

博客目录 1.Ddos 攻击2.SYN Flood3.如何应对 Ddos 攻击4.Xss 漏洞5.越权访问漏洞6.水平越权与垂直越权7.水平越权8.垂直越权 1.Ddos 攻击 DDos 全名 Distributed Denial of Service&#xff0c;翻译成中文就是分布式拒绝服务。指的是处于不同位置的多个攻击者同时向一个或数个…...

4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)

文章目录 前言一、Ajax技术&#xff08;从服务端获取数据&#xff0c;发送各种请求&#xff09;0 接口文档管理&#xff1a;使用apipost等接口测试软件创建接口便于前端后端分离测试1 基本概念2 原生Ajax使用示例&#xff08;几年前的早期用法&#xff09; 二、 Axios技术(对原…...

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题3)-网络部分解析-附详细代码

目录 附录1:拓扑图 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.SW5 6.SW6 7.SW7 8.R1 9.R2 10.R3 11.AC1 12.AC2 13.AP2 14.AP3 15.EG1 16.EG2 附录1:拓扑图 附录2:地址规划表 设备...

ASP.NET Core中间件的概念及基本使用

什么是中间件 中间件是ASP.NET Core的核心组件&#xff0c;MVC框架、响应缓存、身份验证、CORS、Swagger等都是内置中间件。 广义上来讲&#xff1a;Tomcat、WebLogic、Redis、IIS&#xff1b;狭义上来讲&#xff0c;ASP.NET Core中的中间件指ASP.NET Core中的一个组件。中间件…...

每日Attention学习22——Inverted Residual RWKV

模块出处 [arXiv 25] [link] [code] RWKV-UNet: Improving UNet with Long-Range Cooperation for Effective Medical Image Segmentation 模块名称 Inverted Residual RWKV (IR-RWKV) 模块作用 用于vision的RWKV结构 模块结构 模块代码 注&#xff1a;cpp扩展请参考作者原…...

使用jmeter进行压力测试

使用jmeter进行压力测试 jmeter安装 官网安装包下载&#xff0c;选择二进制文件&#xff0c;解压。 tar -xzvf apache-jmeter-x.tgz依赖jdk安装。 yum install java-1.8.0-openjdk环境变量配置&#xff0c;修改/etc/profile文件&#xff0c;添加以下内容。 export JMETER/…...

LQB(0)-python-基础知识

一、Python开发环境与基础知识 python解释器&#xff1a;用于解释python代码 方式&#xff1a; 1.直接安装python解释器 2.安装Anaconda管理python环境 python开发环境&#xff1a;用于编写python代码 1.vscode 2.pycharm # 3.安装Anaconda后可以使用网页版的jupyter n…...

每日Attention学习18——Grouped Attention Gate

模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Grouped Attention Gate (GAG) 模块作用 轻量特征融合 模块结构 模块特点 特征融合前使用Group…...

QT 窗口A覆盖窗口B时,窗口B接受不到鼠标事件

一、问题 在项目的需求中&#xff0c;地图A上面需要叠放一个任务窗口B&#xff0c;B覆盖了A&#xff0c;导致A接受不到鼠标及滚轮事件。 二、解决方案 1、Qt::WA_TransparentForMouseEvents 是 Qt 框架中的一个属性&#xff0c;用于使指定的控件及其子控件不响应鼠标事件。当启…...

Unity安装教学与相关问题

文章目录 1. 前言2.Unity Hub2.1 下载Unity Hub2.2 安装Unity Hub2.3 注册Unity账号2.4 在Hub上登录账号2.5 在Hub上获取许可证 3. 下载并安装Unity3.1 从Unity Hub下载&#xff08;推荐&#xff09;3.1.1 选择下载版本3.1.2 选择下载组件3.1.3 安装Visual Studio Community 20…...

[Python人工智能] 四十九.PyTorch入门 (4)利用基础模块构建神经网络并实现分类预测

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解PyTorch构建回归神经网络。这篇文章将介绍如何利用PyTorch构建神经网络实现分类预测,其是使用基础模块构建。前面我们的Python人工智能主要以TensorFlow和Keras为主,而现在最主流的深度学习框…...

3步掌握yfinance:从金融数据获取到智能分析的完整指南

3步掌握yfinance&#xff1a;从金融数据获取到智能分析的完整指南 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance yfinance是一个强大的Python库&#xff0c;能够轻松从Yahoo! F…...

开源办公套件自动化部署与集成实战:基于OpenOffice的服务化解决方案

1. 项目概述&#xff1a;为什么我们需要一个“开源”的办公套件&#xff1f;如果你在GitHub上搜索过办公软件相关的仓库&#xff0c;大概率会看到过longyangxi/OpenOffice这个项目。乍一看&#xff0c;你可能会以为这是一个Apache OpenOffice的镜像或者某个分支。但点进去仔细研…...

Iris API错误处理机制与嵌入式系统优化实践

1. Iris API错误处理机制解析在嵌入式系统开发中&#xff0c;API的健壮性直接影响整个系统的稳定性。Iris框架作为ARM架构下的核心组件&#xff0c;其错误处理机制基于JSON-RPC 2.0规范进行了深度定制&#xff0c;特别适合资源受限的嵌入式环境。与通用Web API不同&#xff0c;…...

Deep Lake:AI数据湖实战指南,解决深度学习数据管理难题

1. 项目概述&#xff1a;当数据湖遇上深度学习如果你在深度学习项目里被数据管理搞得焦头烂额过&#xff0c;那你肯定懂我在说什么。模型训练到一半&#xff0c;发现数据版本不对&#xff0c;或者想对海量图像、视频做快速查询和采样&#xff0c;结果被IO速度卡得死死的。传统的…...

基于RP2040与I2C总线打造可编程合成器吉他:从硬件到固件的完整实践

1. 项目概述&#xff1a;打造你的第一把可编程合成器吉他 如果你对电子音乐制作和嵌入式硬件开发都感兴趣&#xff0c;那么将两者结合的DIY项目无疑是最迷人的领域。今天要分享的&#xff0c;就是基于Adafruit RP2040 PropMaker Feather微控制器&#xff0c;从零开始打造一把功…...

从二维到三维:DIY LED视频立方体构建全攻略

1. 项目概述&#xff1a;从平面到立体的视觉革命几年前&#xff0c;当我第一次成功点亮一整面由32x32 RGB LED面板组成的视频墙时&#xff0c;那种由1024个像素点共同编织出的动态画面所带来的震撼&#xff0c;至今记忆犹新。但作为一个热衷于将技术推向边界的创作者&#xff0…...

ITK-SNAP医学图像分割:破解三维解剖结构提取的工程难题

ITK-SNAP医学图像分割&#xff1a;破解三维解剖结构提取的工程难题 【免费下载链接】itksnap ITK-SNAP medical image segmentation tool 项目地址: https://gitcode.com/gh_mirrors/it/itksnap 当我们面对复杂的脑部MRI数据、肿瘤CT扫描或心血管影像时&#xff0c;最大…...

基于规则引擎的Markdown笔记自动化归档工具设计与实现

1. 项目概述&#xff1a;一个为知识工作者打造的自动化归档工具如果你和我一样&#xff0c;每天在 Obsidian、Logseq 或者任何支持 Markdown 的笔记软件里记录大量的“每日笔记”&#xff0c;那么你一定也面临过同样的困扰&#xff1a;日积月累&#xff0c;一个名为“Daily Not…...

Verilog时钟分频实战:从偶数、奇数到小数分频的设计与实现

1. 项目概述&#xff1a;从零开始掌握Verilog时钟分频 在数字电路和FPGA设计中&#xff0c;时钟信号是驱动整个系统同步运行的“心跳”。然而&#xff0c;一个系统往往需要多种不同频率的时钟来驱动不同的模块&#xff0c;比如高速的处理器核心和低速的外设接口。直接使用多个外…...

新手必看!CTFShow文件上传靶场通关保姆级教程(Web151-170全解析)

CTFShow文件上传靶场全解析&#xff1a;从入门到精通的实战指南 初识文件上传漏洞 文件上传功能几乎是每个Web应用都具备的基础模块&#xff0c;但恰恰是这个看似简单的功能&#xff0c;成为了无数安全漏洞的温床。在CTF竞赛中&#xff0c;文件上传类题目因其直观性和实战性&am…...