Linux驱动学习记录

本文概述了Linux驱动的核心概念,包括其在硬件与应用软件间的作用,以及驱动程序如何与内核交互。介绍了字符设备、块设备和网络设备驱动的分类,详细列举了驱动程序的主要功能,如设备初始化、数据传输和错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、驱动概念

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

具体任务

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

说明:设备驱动的两个任务方向

  1. 操作硬件(向下)
  2. 将驱动程序通入内核,实现面向操作系统内的接口内容,接口由操作系统实现(向上)

驱动程序按照操作系统给出的独立与设备的接口设计,应用程序使用操作系统统一的系统调用接口来访问设备。

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

  1. 内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统;
  2. 分成设计的思想让程序见松耦合,有助于适配各种平台;
  3. 驱动的上面是系统调用,下面是硬件。

二、驱动分类 

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)

        任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备;

        访问网络接口的方法仍然是它们分配一个唯一的名字(比如echo0),但这个名字在文件系统中不存在对应的节点;

        内核和网络设备驱动程序间的通信,完成不同于内核和字符以及块驱动程序之间的通信,内核调用一套和数据包传输相关的函数(socket)而不是read、write等;

        比如我们常见的网卡设备、蓝牙设备。

三、驱动程序的功能

        1.对设备初始化和释放;

        2.把数据从内核传送到硬件和从硬件读取数据;

        3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据;

        4.检测和处理设备出现的错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值