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

在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.mzph.cn/web/52421.shtml

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

相关文章

Unity笔记之静态/动态合批

借用博主链接 一、静态合批 1、首先项目设置里面需要勾选静态合批 2、添加静态合批选项 3、至此就完成了,至于成功没有就要去分析器里面看了。 静态合批注意问题: 二、动态合批 1、首先项目设置里面需要勾选动态合批 2、调用 StaticBatchingUtilit…

给大家推荐好用的AI网站

地址:https://ai.ashuiai.com/auth/register?inviteCode8E8DIC1QCR 个人觉得挺好用的,可以免费,免费有限制次数,也可以会员升级200永久免费,我用的200永久免费。 可以在国内使用以下ai模型 回答问题更智能&#xff…

IBM中国研发部裁员:全球化背景下的IT产业变局与应对之道

裁员风波中的思考与机遇 前言了解霍尼韦尔的“东方服务东方”施耐德电气的“中国中心”战略对比与分析 中国信息技术(IT)行业展现出蓬勃发展的前景**政府支持与政策导向****技术创新与应用****市场规模与需求****人才培养与就业**国际化与开放合作总结 前言 如何看待IBM中国研发…

“冰山之下”:谁在成为车企的真正智能助手?

“其实我们一直扮演的角色就是数字化助手,也就是别人可以去挖金,我们给大家提供铲子,这是我们扮演的角色,而现在我们希望给大家提供最好的铲子。” 作者| 皮爷 出品|产业家 如果说AI发展的最鲜明印痕是什么?有人…

【原创教程】自动化工程案例01:8工位插针装配机03-程序解读

在前面两篇文章中,我们介绍了8工位设备每个工位的情况,然后我们介绍了触摸屏的情况,接着我们来看一下程序。关于一些实物照片不宜公开发表,需要的可以私信。 程序系统块设置 系统块中的模块实际上是我们所使用的的硬件设施 符号…

本地Linux服务器使用docker搭建DashDot并实现公网实时监测服务器信息

文章目录 前言1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用3. 本地访问DashDot服务4. 安装cpolar内网穿透5. 固定DashDot公网地址 前言 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘,并且结合cpolar内网穿透工具可以实现公网实…

HC-SR501人体红外传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 body_hw.h文件 body_hw.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 HC-SR501人体红外模块是基于红外线技术的自动控制模块,采用德国原装进口LHI77…

USB总线开关量DIO采集卡,24路数字量输入输出及32位计数器卡USB5801

阿尔泰科技 型号:USB5801 概述: 产品应用: 指标参数: 数字量 通道数 24路,每8路可配置成输入或输出 电气标准 TTL兼容 数字量输入 高电平的低电压:2V 低电平的高电压:0.8V 数字量输出 …

数据结构基础讲解(七)——数组和广义表专项练习

本文数据结构讲解参考书目: 通过网盘分享的文件:数据结构 C语言版.pdf 链接: https://pan.baidu.com/s/159y_QTbXqpMhNCNP_Fls9g?pwdze8e 提取码: ze8e 数据结构基础讲解(六)——串的专项练习-CSDN博客 个人主页:樱娆…

替代区块链

随着比特币的成功,人们逐渐意识到区块链技术的潜力,并随之出现了迅速的发展,各种区块链协议、应用程序和平台相应产生。 需要指出的是,在这种多元的局面下,很多项目迅速失去了它们的吸引力。事实上,有不少项…

ITK-高斯滤波

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 高斯滤波原理 高斯滤波(Gaussian Blur)是数字图像处理中常见的一种平滑滤波器,旨在通过模糊处…

Edge-Triggered模式:反应堆

Linux: Linux Code - Gitee.comhttps://gitee.com/RuofengMao/linux/tree/master/Reactor

yolov5-6.2 在 rk3399pro 上的移植

文章目录 一、搭建yolov5环境二、导出onnx模型三、安装 rknn-toolkit四、通过netron 查看 yolov5s.onnx 输出节点五、创建 onnx2rknn.py 文件六、通过toolkit将onnx转换为rknn模型七、在rk3399pro开发板上运行rknn模型 一、搭建yolov5环境 从yolov5官方仓库 ultralytics/yolov…

【DS18B20 简单开发】

DS18B20 是一种数字温度传感器,由 Maxim Integrated 生产。它提供了一个非常简单的方式来将温度测量集成到微控制器系统中。以下是关于 DS18B20 的一些关键特性: 单总线协议:DS18B20 使用单总线(1-Wire)数字通信协议&…

HTML添加文字

一、创建HTML5文档基本标签 <!DOCTYPE html> //定义文档类型 <html> //定义HTML文档<head> //定义关于文档的信息<title>文档标题</title> //定义文档的标题<meta charset"utf-8" /> //定义文档的字符编码</head&…

远程连接Hiveserver2服务

目录 1.修改 core-site.xml 和 hive-site.xml 的配置文件 2.启动HiveServer2服务 3.启动Beeline工具连接Hiveserver2服务 4.利用IDEA工具连接Hiveserver2服务 完成Hive本地模式安装后&#xff0c;可以启动hiveserver2服务进行远程连接和操作Hive。 1.修改 core-site.xml …

rancher upgrade 【rancher 升级】

文章目录 1. 背景2. 下载3. 安装4. 检查5. 测试5.1 创建项目5.2 创建应用5.3 删除集群5.4 注册集群 1. 背景 rancher v2.8.2 升级 v2.9.1 2. 下载 下载charts helm repo add rancher-latest https://releases.rancher.com/server-charts/latest helm repo update helm fetc…

常见概念 -- 光回波损耗

什么是回波损耗 回波损耗&#xff0c;又称为反射损耗&#xff0c;当高速信号进入或退出光纤的某个部分&#xff08;例如光纤连接器&#xff09;&#xff0c;不连续和阻抗不匹配会引起反射&#xff0c;这就是光纤回波损耗。器件的回波损耗Return Loss(RL)是光信号的输入端口的反…

C++ | Leetcode C++题解之第395题至少有K个重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestSubstring(string s, int k) {int ret 0;int n s.length();for (int t 1; t < 26; t) {int l 0, r 0;vector<int> cnt(26, 0);int tot 0;int less 0;while (r < n) {cnt[s[r] - a];…

西门子PLC与HMI之间的时间同步工控小周

HMI 时间同步功能工控人加入PLC工业自动化精英社群 HMI 设备具有时间同步功能&#xff0c;利用 HMI 设备的该功能&#xff0c;可实现 PLC 和 HMI 之间的时间同步&#xff0c;进而实现多个 PLC 之间的时间同步。 HMI 设备时间同步的属性&#xff1a; 1.HMI 设备既可作为主站对…