字符设备驱动开发基础

一.  简介

本文简单了解一下,在字符设备驱动开发开始前对其一些基本认识。简单了解一下,应用程序与驱动的交互原理,以及字符设备驱动开发流程。

二.  字符设备驱动开发流程

1.  Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx(xxx 是具体的驱动文件名字)的文件进行相应的操作即可实

现对硬件的操作。

例如,/dev/led。应用程序调用open函数打开设备,比如 led。通过write函数向/dev/led写数据,假如 1表示打开,写 0表示关闭。如果要关闭设备,那么就是 close()函数。

2.  编写驱动的时候,也需要编写驱动对应的open、close,write函数。例如,字符设备驱动file_operations 结构体,这个结构体就描述了字符设备驱动操作的一个集合。

3. 驱动是分驱动框架的,要按照驱动框架来编写。

驱动最终是被应用调用的,在写驱动的时候要考虑应用开发的便利性。

驱动是分驱动框架的,要按照驱动框架来编写,对于字符设备驱动来说,重点编写应用程序对应的open、close、read、write() 等函数。

三.  应用程序和驱动的交互原理

1.  驱动做了什么?

驱动就是获取外设、或者传感器数据,也会控制外设。将一些数据会提交给应用程序。

Linux驱动编译既要编写一个驱动,还要我们编写一个简单的测试应用程序,APP。

单片机下驱动和应用都是放到一个文件里面,也就是杂糅到一起。Linux下驱动和应用是完全分开的。

2.  用户空间(用户态)和内核空间(内核态):

Linux操作系统内核 和驱动程序 运行在内核空间,应用程序运行在用户空间。

3.  应用程序和驱动的交互

应用程序想要访问内核资源,怎么办?

有三种方法:系统调用、异常(中断)和陷入。

应用程序不会直接调用系统调用,而是通过API函数来间接的调用系统调用,比如POSIX、API和C库等。unix类操作系统中最常用的编程接口就是POSIX。

每个系统调用都有一个系统调用号。系统调用处于内核空间,应用程序无法直接访问,因此需要“陷入“到内核,方法就是软中断。陷入内核以后还要指定系统调用号。

应用程序的系统调用如下结构图所示:

可以看出,左边一列调用关系:应用程序直接进行的系统调用,例如,open() 函数。

右边一列调用关系:应用程序首先调用 C库里面的函数,C库中的函数最终调用系统调用函数。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 18:22:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 18:22:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 18:22:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 18:22:02       18 阅读

热门阅读

  1. (python)正则表达式进阶

    2023-12-17 18:22:02       45 阅读
  2. 正则表达式的规则

    2023-12-17 18:22:02       43 阅读
  3. Web应用安全—信息泄露

    2023-12-17 18:22:02       38 阅读
  4. oracle怎么存放json好

    2023-12-17 18:22:02       22 阅读
  5. Python学习笔记第七十三天(OpenCV简介)

    2023-12-17 18:22:02       41 阅读
  6. 【Qt5】QDialog的pos函数

    2023-12-17 18:22:02       35 阅读
  7. MHA实验和架构

    2023-12-17 18:22:02       29 阅读