Linux设备驱动入门

2023-11-20

Linux驱动配置

什么是驱动程序

  1. 驱动程序是应用层和硬件设备之间的一个软件层。
  2. 它向应用层提供了一组标准化的调用接口,同时完全隐藏设备的工作细节。

无操作系统时的设备驱动

在这里插入图片描述

有操作系统时候的设备驱动

在这里插入图片描述

有了操作系统之后,设备驱动反而变得更加复杂了,那么还要操作系统做什么?

  1. 一个复杂的软件系统需要处理多个并发的任务
  2. 提供内存管理机制,对于LINUX操作提供可以让每个进程都独立的访问硬件设备
  3. 设备驱动都按照操作系统给出的独立于设备的接口而设计,应用程序将可使用统一的系统调用接口来访问各个设备
    在这里插入图片描述

LINUX中驱动的存在方式

1.编译进内核,启动内核时就会驱动此硬件设备
2.模块方式,编译生成一个.ko文件,当应用程序需要时再动态加载进内核空间

驱动的分类

字符设备驱动

字符设备驱动是一种可以按字节以串行顺序依次访问的设备,如触摸屏、磁带驱动器、鼠标等。字符设备驱动则负责驱动字符设备,这样的驱动通常实现open 、close、read和write 等系统调用。

网络设备驱动

任何网络事务都通过一个接口来进行,这一个接口通常是一个硬件设备(eth0),但是它可以是要给纯粹的 软件设备,比如回环接口(lo)。一个网络接口负责发送和接收数据报文。
网络设备没有对应设备文件。

块设备驱动

块设备可以用任意顺序进行访问、以块为单位进行操作,如硬盘、软驱等,块的大小任意,但是一般是512的整数倍
因此 ,块设备和字符设备的区别是驱动的与内核的接口不同
当其实字符设备和块设备并没有明显的界限,如FLASH设备符合块设备的特点,当一般还是当作字符设备访问。
块设备驱动通常也是实现open、close、read和write系统调用

其他独特的驱动体系结构

另外。TTY驱动,IIC驱动,USB驱动,PCI驱动,LCD驱动等本身大体可归纳入3个基础大类,但是对于这些复杂的设备,linux系统还定义了独特的驱动 体系结构。

编写LINUX设备驱动的基础

在这里插入图片描述

驱动程序的使用

linux用户如何使用驱动程序

在这里插入图片描述
linux用户程序通过设备文件(又名:设备节点 eg:/dev/gpio)来使用驱动程序操作设备。

内核编程注意事项

1.要防止并发和竞争
2.不要做浮点运输
3.不能做太耗时的事情
4.拥有锁的时候,不要休眠
5.复杂的过程处理交给应用层去完成
6.不能访问应用层的函数
7.不能有死循环

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux设备驱动入门 的相关文章

随机推荐

  • 田忌赛马java代码算法,AcWing 1489. 田忌赛马——Java版代码

    import java io import java util public class 田忌赛马 public static void main String args throws IOException BufferedReader
  • Thrift快速入门

    文章目录 Thrift的安装 windows下安装 Linux下安装 Thrift的使用 编写IDL文件 命名空间 namespace 基本数据类型 类型定义 typedef 结构体类型 struct 枚举类型 enum 异常类型 exce
  • MybatisX简介

    MybatisX简介 前言 一 什么是MybatisX 二 如何使用 1 安装插件 2 创建一个mybatis项目或者于项目中引入mybatis依赖 3 快速生成示例 3 1 快速生成mapper方法 3 2 MybatisX Genera
  • 使用lattice包的bwplot函数绘制箱图比较多个模型在不同指标上的性能差异(R语言)

    使用lattice包的bwplot函数绘制箱图比较多个模型在不同指标上的性能差异 R语言 箱图是一种常用的数据可视化方法 用于表示一组数据的分布特征 包括中位数 四分位数 异常值等 在比较多个模型在多个指标上的性能差异时 箱图可以提供直观的
  • NCCL相关笔记

    本文仅代表个人观点 不保证正确性 一 NCCL简介 1 什么是NCCL NCCL是NVIDIA集合通信库 NVIDIA Collective Communications Library 的简称 是用于加速多GPU之间通信的库 能够实现集合
  • #css# 【四】如何使用hover,实现父对子的样式改变?

    css 如何使用hover 实现父对子的样式改变 思路及做法 鼠标移动到父盒子的时候 里面所有的子盒子的样式都发生变化的 只需要直接在hover后面加上空格 并且加上子盒子的类名 里面再写其他样式 父盒子的类名 hover 子盒子的类名 这
  • iOS系统网络抓包方法

    原文地址 http www cnblogs com ydhliphonedev archive 2011 10 27 2226935 html 在进行iOS开发过程中 经常会遇到各种各样的网络访问问题 以前苦于没有抓包工具 很多网络问题解决
  • 【python-opencv】硬币检测

    使用 python3 8 x opencv 硬币检测 问题描述 设计思路1 使用简单特征识别 具体操作 部分代码 设计思路2 模板匹配 源码 模板制作 完整代码 问题描述 使用图像处理技术 从照片中识别硬币的个数 并判断总价值 设计思路1
  • ESP32开发阶段启用 Secure Boot 与 Flash encryption

    Secure Boot 与 Flash encryption详情 请参考 https blog csdn net espressif article details 79362094 1 开发环境 AT版本 2 4 0 0 发布 IDF 与
  • git忽略文件地址

    git忽略文件地址 Objective C gitignore gitignore
  • String和StringBuffer的常见用法

    链接 https www nowcoder com questionTerminal fe6b651b66ae47d7acce78ffdd9a96c7 answerType 1 f discussion来源 牛客网 String的用法 ja
  • dubbo配置提供者和消费者

    1 找到对应的文件 提供者 消费者 参考dubbo官网 http dubbo apache org zh cn docs user quick start html
  • 【NLP】第 6 章 :微调预训练模型

    到目前为止 我们已经了解了如何使用包含预训练模型的huggingface API 来创建简单的应用程序 如果您可以从头开始并仅使用您自己的数据来训练您自己的模型 那不是很棒吗 如果您没有大量空闲时间或计算资源可供使用 那么使用迁移学习 是最
  • 连接池

    总结 1 连接池 java对外提供了连接的接口 连接池的存在就省去了每次创建和释放连接 2 连接池的连接条件 1 将commons pool 1 5 6 jar的jar包引进java项目下的lib文件夹 3 用连接池对象代替dao 层的Co
  • TP6.0 自定义命令创建类文件

    一 修改框架核心扩展包 1 新增指令配置项 2 创建逻辑层类文件模板 3 创建 Logic php 文件 4 执行命令 创建逻辑层类文件 二 不用修改框架源码 推荐 1 创建一个自定义命令类文件 以逻辑层类文件为例 2 复制创建模型类的命令
  • 解决 npm或pnpm : 无法加载文件 C:\Users\bts\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本

    vscode 使用 npm 或 pnpm打开网页时出现此问题 解决方法 点击左下角开始 找到Windows PowerShell 点击右键找到更多 找到以管理员身份运行 输入命令 set ExecutionPolicy RemoteSign
  • 使用禅道 api 添加用户完整流程与分析

    在使用禅道系统时 有时为了方便 需要与其他系统对接 如其他系统添加用户后可以直接同步到禅道系统 而不是在禅道系统重新添加一遍用户 禅道系统提供了二次开发的api 但是里面的内容并不详细 故笔者写这篇文章进行记录 这里先以 postman进行
  • STM32与ESP8266-MQTT固件的应用

    本文以Clion作为编译器 STM32F407作为芯片 通过串口以AT指令与ESP8266 01S进行通信 让其连接到腾讯云物联网平台 一 ESP8266 01S ESP8266 01S原本固件是不支持MQTT的 因此需要在安信可官网去下载
  • mysql union保持原有查询的排序

    摘要 mysql中对union之后的结果进行排序比较简单 但业务中也会遇到需要保持各个union结果集自身的排序情况 本文将介绍一种想要保持union前各个查询结果集的排序规则不变的处理方式 为各个结果集编排独立排序 规则描述与数据准备 数
  • Linux设备驱动入门

    Linux驱动配置 什么是驱动程序 驱动程序是应用层和硬件设备之间的一个软件层 它向应用层提供了一组标准化的调用接口 同时完全隐藏设备的工作细节 无操作系统时的设备驱动 有操作系统时候的设备驱动 有了操作系统之后 设备驱动反而变得更加复杂了