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

Linux驱动开发详细解析

Linux驱动开发详细解析

驱动概念

驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁。

  • 具体任务
    1. 读写设备寄存器(实现控制的方式)
    2. 完成设备的轮询、中断处理、DMA通信(CPU与外设通信的方式)
    3. 进行物理内存向虚拟内存的映射(在开启硬件MMU的情况下)

Linux系统主要部分:内核、shell、文件系统、应用程序

  • 内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统
  • 分层设计的思想让程序间松耦合,有助于适配各种平台
  • 驱动的上面是系统调用下面是硬件
    在这里插入图片描述

驱动分类

Linux驱动分为三个基础大类:字符设备驱动,块设备驱动,网络设备驱动

  1. 字符设备(Char Device)
    • 字符(char)设备是个能够像字节流(类似文件)一样被访问的设备。
    • 对字符设备发出读/写请求时,实际的硬件I/O操作一般紧接着发生。
    • 字符设备驱动程序通常至少要实现open、close、read和write系统调用。
    • 比如我们常见的lcd、触摸屏、键盘、led、串口等等,他们一般对应具体的硬件都是进行出具的采集、处理、传输。
  2. 块设备(Block Device)
    • 一个块设备驱动程序主要通过传输固定大小的数据(一般为512或1k)来访问设备。
    • 块设备通过buffer cache(内存缓冲区)访问,可以随机存取,即:任何块都可以读写,不必考虑它在设备的什么地方。
    • 块设备可以通过它们的设备特殊文件访问,但是更常见的是通过文件系统进行访问。
    • 只有一个块设备可以支持一个安装的文件系统。
    • 比如我们常见的电脑硬盘、SD卡、U盘、光盘等。
  3. 网络设备(Net Device)
    • 任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备。
    • 访问网络接口的方法仍然是给它们分配一个唯一的名字(比如eth0),但这个名字在文件系统中不存在对应的节点。
    • 内核和网络设备驱动程序间的通信,完全不同于内核和字符以及块驱动程序之间的通信,内核调用一套和数据包传输相关的函(socket函数)而不是read、write等。
    • 比如我们常见的网卡设备、蓝牙设备。

驱动程序的功能

  1. 对设备初始化和释放
  2. 把数据从内核传送到硬件和从硬件读取数据
  3. 读取应用程序传送给设备文件的数据和回送应用程序请求的数据
  4. 检测和处理设备出现的错误
http://www.lryc.cn/news/12419.html

相关文章:

  • Java Character 类,超详细整理,适合新手入门
  • Python量化入门:关于收益率的一些概念
  • 微搭使用笔记(三) 数据模型介绍及初步使用
  • JavaScript刷LeetCode心得
  • 浙江工商大学2023年硕士研究生 入学考试初试成绩查询通知及说明
  • 华为OD机试题 - 子序列长度(JavaScript)
  • Simulink 自动代码生成电机控制:STM32 Encoder编码器使用总结
  • 《计算机系统基础》——计算机系统导论
  • 华为OD机试 - 获取最大软件版本号(JavaScript) | 机试题算法思路 【2023】
  • python--pygame实现各级菜单栏目设置
  • C++Primer15.3节练习
  • 解决实际项目中stalled时间过久的问题
  • vim编辑器
  • Python 使用 pip 安装 matplotlib 模块(秒解版)
  • python-openCV—入门到精通系列讲解(配效果图)- 总览
  • 智能小车红外避障原理
  • (三十六)Vue解决Ajax跨域问题
  • 【CSAPP】整数表示
  • Python基础2
  • 【项目立项管理】
  • 【验证码的识别】—— 极验验证码的识别
  • 华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】
  • C生万物 | 模拟实现库函数strcpy之梅开n度
  • 家庭理财,轻松记账修改收支记录这样操作
  • 河南工程学院2.17蓝桥杯培训
  • 【JavaSE】数据类型与变量
  • 生成模型技术发展过程
  • 计算机网络第2章(物理层)学习笔记
  • 4564: 保留尾部*
  • 安卓项目搭建grpc环境