【Linux驱动】认识驱动(驱动的概念、驱动分类)

         目录

1、什么是驱动?

2、应用程序调用驱动基本流程

3、file_operations 结构体

4、驱动的分类


1、什么是驱动?

驱动就是一段程序,能够获取外设或者传感器数据、控制外设。驱动获取到的数据会提交给应用程序。

在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“ /dev/xxx ”的文件进行相应的操作即可实现对硬件的操作。比如 /dev/ttyS2 表示串口设备,应用程序可以调用 read 函数从设备中读取数据,可以调用write函数向设备写入数据。

表面上是应用程序在操作设备,实际上这个过程中有驱动的参与。

2、应用程序调用驱动基本流程

应用程序运行在用户空间,而驱动是被加载到内核的,运行在内核空间,正常情况下,应用程序无法直接访问内核,内核给用户层提供了API接口来访问内核。这些API接口我们称为“ 系统调用 ”。

应用程序调用驱动的基本流程如下。我们会发现应用程序调用 open 函数以后,先进入到内核,然后会调用内核中的 open 函数,这里的 open 函数才是真正操作硬件的执行人。因此,编写驱动实际就是在完善内核中的 open、close、read等函数

【Linux驱动】认识驱动(驱动的概念、驱动分类)_第1张图片

上层应用层的每一个系统调用函数,在内核都会有与之对应的函数。

应用层 内核
open  open
read read
close release

3、file_operations 结构体

问:上面说到,编写驱动其实就是在完善内核中的 open、close、read等函数,那么这些函数是自己设计还是有现成的呢?

答:

        前人已经设计出了一套完整的框架,这个框架已经包含了我们所需的大部分函数声明,所以无需我们自己设计,我们只要继续沿用前人的声明即可。

内核源码中有个 include/linux/fs.h 文件,这个文件定义了一个 file_operations 结构体,该结构体中就包含了今后要实现的函数声明。

【Linux驱动】认识驱动(驱动的概念、驱动分类)_第2张图片

4、驱动的分类

设备不同,实际操作的方式也会不同,因此根据设备的种类,驱动可以大致分为三类:

字符型设备驱动

        只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。常见的字符设备有鼠标、键盘、串口、控制台和LED设备。

块设备驱动

        可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等存储类设备。

网络设备驱动

        负责读写来自网络的数据。常见的网络设备有网卡(有线、无线)。

【Linux驱动】认识驱动(驱动的概念、驱动分类)_第3张图片

你可能感兴趣的:(嵌入式,驱动开发)