Linux驱动.之驱动开发思维,设备,驱动,总线分析思想,驱动的分类(字符设备,块设备,网络设备)

news2024/9/22 9:36:09

在stm32,裸机开发时,偏底层,跟寄存器打交道,有些MCU提供了库,库也还是操作寄存器的,通过配置寄存器,
配置各种工作模式,时钟,等等,交换数据等等。

Linux下驱动开发直接操作寄存器不现实。一个soc的资源比较庞大,寄存器比较多,不肯能,所有设备,都直接操作寄存器。

Linux下,驱动开发,是根据Linux下的各种驱动框架进行开发。一定要满足框架,也就是Linux下各种驱动框架的掌握,完善框架。添加修改不同设备的属性,比如gpio,配置输入输出模式,高低电平等等,直接调用内核,提供的api,来进行操作。比如iic,spi,都是通过api来操作。将设备,驱动,进行了分离。驱动由厂商提供完善,总线由内核完善,设备的一部分由soc厂商完善,剩下一些配置等,由驱动开发者,进行修改移植。

驱动最终表现就是/dev/xxx文件。打开、关闭、读写、。。。

现在新的内核支持设备树,这个一个.dts文件,此文件 描述了板子的设备信息。比如要操作i2c一个外设,就要知道外设的地址,将设备信息,添加到设备树,板卡所有的信息,都添加到设备树,来告诉内核,板卡有什么资源,启动时,就会根据设备,去寻找驱动,进行匹配。

linux驱动分为三大类

1、字符设备驱动,最多的。字符设备,就是一个个字节,按字节流的方式,读写操作设备
2、块设备驱动,存储类设备,按块,读写数据,如sd卡都是一个块,页读写数据的
3、网络设备驱动,和网络相关的,就是网络设备
一个设备不说是一定只属于某一个类型。比如USB WIFI,SDIO WIFI,属于网络设备驱动,因为他又有USB和SDIO,因此也属于字符设备驱动。

在这里插入图片描述

应用程序和驱动的交互原理

1、驱动就是获取外设、或者传感器数据,控制外设。数据会提交给应用程序。Linux驱动编译既要编写一个驱动,还要我们编写一个简单的测试应用程序,APP。单片机下驱动和应用都是放到一个文件里面,也就是杂糅到一起。Linux下驱动和应用是完全分开的。

用户空间(用户态)和内核空间(内核态):
Linux操作系统内核和驱动程序运行在内核空间、应用程序运行在用户空间。

应用程序想要访问内核资源,怎么办,有三种方法:系统调用、异常(中断)和陷入

应用程序不会直接调用系统调用,而是通过API函数来间接的调用系统调用,比如POSIX、API和C库等。unix类操作系统中最常用的编程接口就是POSIX。

应用 程序使用open函数 打开一个设备文件。
每个系统调用都有一个系统调用号。
系统调用处于内核空间,应用程序无法直接访问,因此需要“陷入“到内核,方法就是软中断。陷入内核以后还要指定系统调用号。

在这里插入图片描述

关于虚拟内存有三点需要注意:

4G的进程地址空间被人为的分为两个部分–用户空间与内核空间。用户空间从0到3G(0xc0000000),内核空间占据3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。例外情况只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可以访问到内核空间。
用户空间对应进程,所以每当进程切换,用户空间就会跟着变化;而内核空间是由内核负责映射,它并不会跟着进程变化,是固定的。内核空间地址有自己对应的页表,用户进程各自有不同的页表。
每个进程的用户空间都是完全独立、互不相干的。
一、4G地址空间解析图
在这里插入图片描述

二、虚拟地址空间分配及其与物理内存对应图
在这里插入图片描述

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

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

相关文章

什么是串口服务器?

1.什么是串口服务器? 了解串口服务器之前,我们需要先了解什么串口。 串口:又叫串行数据接口,主要是用来表示传递各种的数据的通信接口,通常指COM口。一般分为RS232、RS422、与RS485三种。RS232接口:采用全…

包装类 ---- java

思维导图: 在 Java 中,自动装箱(autoboxing)和拆箱(unboxing)是一种自动将基本数据类型和对应的包装类进行转换的机制。 一:基本数据类型和对应的包装类 二:装箱和拆箱 int i 10;/…

Spring Boot 3.3新特性解析:CDS支持与Base64配置

前言 Spring Boot 3.3.0 已经发布,其中包含对 CDS支持与Base64配置。 CDS(Class Data Sharing)是一项JVM功能,允许在多个JVM实例之间共享类元数据,从而减少应用程序的启动时间和内存占用。Spring Boot 3.3提供了对CD…

Web前端全栈Vue3项目实战:‌从零到一的完整指南

Web前端全栈Vue3项目实战:‌从零到一的完整指南 在当今的前端开发领域,‌Vue.js 凭借其简洁、‌易学且高效的特点,‌成为了众多开发者的首选框架。‌随着 Vue 3 的发布,‌其在性能、‌类型支持以及组合式 API 等方面的提升&#…

Influxdb简介

InfluxDB 是一个开源的、专门为处理时序数据(Time Series Data)设计的数据库管理系统。它由 InfluxData 开发,旨在高效地存储和查询大量的时序数据,如监控数据、传感器数据、日志、指标和事件等。

图论(1)

一、无序对的定义 无序对中的两元素不分先后 无序积是无序对的集合 无序对里面的元素交换位置还是之前的无序对 二、图 三、图的表示 1、图的表示法 有集合表示法、画图表示法、矩阵表示法 集合表示法:把所有边写在一个集合里,所有点写在一个集合里…

C语言:常用技巧汇总

一、字符串存储在数组中 int main() {char* arr[7] {"xiaoming","zhangsan","李四"};printf("%s\n", arr[0]);printf("%s\n", arr[2]);return 0; } 二、scanf()函数用法 2.1 scanf()输入字符串 int main() {char arr[10…

沸点 | LDBC 第18届 TUC 会议召开,专家孙宇熙受邀参加并发表演讲

图数据管理领域国际权威组织LDBC(Linked Data Benchmark Council)于8月30日至31日在广州举办了第18届LDBC TUC会议。作为图数据库领域的创新引领者,嬴图受邀参加此次盛会,国际高性能计算与存储系统专家、大数据专家、图专家及嬴图…

国赛数模C题模型(五)

熵权法 原理介绍 熵权法:(1)熵:指标的信息熵。信息熵描述所有可能发生事件的不确定性。 ​ (2)权:指标的权重,描述指标的重要程度。 ​ (3)熵权法&#xff1…

Java实现加密(六)国密SM2算法

目录 一、SM2 简介1.1 概述1.2 国密与国际密的对应关系1.3 优势1.4 ECC加密算法 vs RSA加密算法二、SM2 应用场景2.1 数据加密2.2 密钥协商2.3 数字签名三、Java 实现 SM2 的两种方式3.1 Maven 依赖3.2 实现方式一1)SM2Utils.java2)SignatureSM2Util.java3)Param.java4)测试…

界面控件DevExpress中文教程:如何使用AI扩展Excel计算?

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

人工智能 | Mistral 大语言模型

Mistral AI Mistral AI team Mistral AI 是一家销售人工智能产品的法国公司。它由 Meta Platforms 和 Google DeepMind 的前员工于 2023 年 4 月创立。该公司于 2023 年 10 月筹集了 3.85 亿欧元,2023 年 12 月估值超过 20 亿美元 Mistral.AI 愿景与使命 我们是一…

Linux动态链接库

一、背景 我们使用Linux的过程中,例如安装程序或者部署一些如Python等,可能会遇到过如下动态链接库(共享库)报错: ImportError: libcrypto.so.10: cannot open shared object file: No such file or directory $"./lib/python3.8/lib/python3.8/ss…

同三维TM6-6 有线6级联会议麦克风详情介绍

同三维TM6-6 有线6级联会议麦克风 信息通讯类智能阵列麦克风 有线传输,强抗干扰、可级联、长续航、低延时 6个麦克风级联,通过3.5音频线级联, 可以同时使用3.5mm LINE IN/OUT、USB有线连接PC端,每条音频线是3米,可应用在视频会…

使用vscode编辑matlab完美解决方法

vscode里面的matlab插件都不好用,需要搭配互补一下 1先安装MATLAB 这个插件可以进行代码高亮、格式化、跳转,F5运行所有代码,或者选中要运行的代码,右键单独运行, 优点:运行速度很快,和matlab里…

idea新建父工程和添加导入新模块的步骤

如何在idea中新建一个父工程&#xff0c;然后在父工程下新建多个微服务模块&#xff1f; 一、新建父工程 1.1 新建New Project 1.2 删掉多余文件 创建好后&#xff0c;把多余的文件删掉&#xff0c;变成这样 1.3 修改pom文件 添加<packaging>pom</packaging>…

【Webpack】基本使用方法

参考视频&#xff1a; 30 分钟掌握 Webpack_哔哩哔哩_bilibili 什么是webpack 简单来说就是一个 打包工具&#xff0c; 可以将互相依赖的html、css、js以及图片字体等资源文件&#xff0c;经过处理打包成一个可执行的项目文件 &#x1f330;看例子 环境初始化 在需要使用…

ai智能写作助手批量生成文章,提升工作效率!

在当今快节奏的工作环境中&#xff0c;时间就是金钱&#xff0c;效率就是生命。对于需要大量产出文章的工作者来说&#xff0c;如何在有限的时间内创作出高质量的内容&#xff0c;成为了一个亟待解决的问题。而AI智能写作助手的出现&#xff0c;为这一问题提供了解决方案。本文…

godot开发初体验

点击加号可以创建一个新的场景 点击其它节点可以添加节点 想对某个节点添加子节点可以右键这个节点,然后点击添加子节点 在左下角的文件系统中,可以右键某个场景,并将其设置为主场景,主场景作为程序的入口 点击项目->项目设置-> 输入映射,可以添加一个新的动作,在添加新动…

游戏应用|空地模型实景融合,还原《黑神话:悟空》游戏场景

古色斑驳&#xff0c;巍峨险峻&#xff0c;是历史的低语&#xff0c;诉说着千百年的沧桑与辉煌&#xff1b;飞檐翘角&#xff0c;雕梁画栋&#xff0c;凝聚着时代的文明与智慧。在数字化浪潮下&#xff0c;我们利用实景三维技术&#xff0c;翻开了中华古建筑这本伟大的史诗。 P…