关闭

字符设备驱动基础篇3——字符设备驱动工作原理

132人阅读 评论(0) 收藏 举报
分类:

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。

参考资料:http://www.cnblogs.com/biaohc/p/6575074.html


1、系统整体工作原理

(1)应用层-》API-》设备驱动-》硬件;

(2)API:open、read、write、close等操作逻辑(“吃饭”这个宏观操作)

(3)驱动源码中提供真正的open、read、write、close等函数实体(右手,用筷子等具体操作)



2、file_operations结构体

结构体成员的解释,见博文:http://blog.csdn.net/oqqhutu12345678/article/details/78508273

                                           

(1)该结构体的元素主要是函数指针,用来挂接实体函数地址;

(2)每个设备驱动都需要一个该结构体类型的变量;

(3)设备驱动向内核注册时,提供该结构体类型的变量。

(4)该结构体的成员函数是字符设备驱动程序设计的主体内容,这些函数实际会在应用程序进行linux的open()、read()等系统调用时最终被内核调用。


3、注册字符设备

  • 在没有框架模型前,这里注册驱动、注册设备混为一谈(设备号和file_opertion紧结合,一个驱动的信息包含两者)。

(1)为何要注册驱动?如果不注册,内核查无此人。

(2)谁去负责注册?驱动去注册自己。

(3)向谁注册?向内核注册。

(4)注册函数从哪里来?内核提供了注册函数,驱动需要调用此函数来注册自己。

(5)注册前怎样?注册后怎样?注册产生什么结果?查有此人,内核可以调用此驱动去驱动硬件。


4、register_chrdev函数详解(#include <linux/fs.h>)



(1)作用是驱动向内核注册某设备的file_operations

  • 成功返回值为0,失败返回负数。

(2)参数

  • major,可以自己指定,也可以让内核帮忙分配。表征当前设备的编号,范围是1~254;犹如身份证号。
  • name,表示当前设备驱动的名字;犹如具体名字。
  • fops,file_operations结构体指针。
  • cat /proc/devices,可以查看哪些设备号可用。

(3)inline和static

  • inline修饰:因为此函数定义在头文件里面,如果被两个文件包含,就会被重复定义,使用inline后,就只剩函数体了,而不是函数定义。本质原因是此函数太短了。

5、内核如何管理字符设备驱动

(1)内核中用一个数组,来存储注册的字符设备驱动;

  • 数组的缺陷,因此只有1-254?

(2)register_chrdev函数将(要注册的)驱动的信息(包括设备号和file_operations)存储在数组中相应的位置;


(3)使用cat /proc/devices,查看内核中已经注册过的字符设备驱动和块设备驱动;

  • 有些编号默认分配给某些设备。
  • 理解主设备号(major)的概念。



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析

解析完 open、close、read、write 四个函数后,终于到我们的 ioctl() 函数了 一、 什么是ioctl          ioctl是设备驱动程序中对设备的I/O通道进行管理的函...
  • zqixiao_09
  • zqixiao_09
  • 2016-03-11 22:55
  • 2691

深入理解Linux字符设备驱动

文章从上层应用访问字符设备驱动开始,一步步地深入分析Linux字符设备的软件层次、组成框架和交互、如何编写驱动、设备文件的创建和mdev原理,对Linux字符设备驱动有全面的讲解。
  • yueqian_scut
  • yueqian_scut
  • 2016-03-20 11:09
  • 3328

Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动

现在,我们来编写自己第一个字符设备驱动 —— 点亮LED。 硬件平台:Exynos4412(FS4412) 编写驱动分下面几步: a -- 查看原理图、数据手册,了解设备的操作方法; b -- 在...
  • zqixiao_09
  • zqixiao_09
  • 2016-03-10 22:48
  • 4085

Linux驱动程序开发之字符设备驱动——基础篇(二)

Linux驱动程序开发之字符设备驱动——基础篇(二) 转自:http://www.cnblogs.com/LakeFollow/archive/2012/07/30/2614475.html ...
  • zlyong0018
  • zlyong0018
  • 2012-09-14 23:07
  • 321

字符设备驱动基础篇1——简单的驱动源码分析

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html module_tes...
  • oqqHuTu12345678
  • oqqHuTu12345678
  • 2017-07-19 09:21
  • 337

字符设备驱动基础篇5——驱动如何操控硬件(动静态映射操作LED)

以下内容源于朱有鹏嵌入式课程的学习,,如有侵权,请告知删除。 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html 这里的映射,是指物理地...
  • oqqHuTu12345678
  • oqqHuTu12345678
  • 2017-07-16 16:55
  • 112

LDD3笔记——字符设备驱动简单分析

在学习字符设备驱动时,尝试理解下列问题。1、  什么是字符设备?什么是字符设备驱动?这是两个完全不同的概念,字符设备是以字节为单位进行顺序访问的一类设备的总称,常见的字符设备有键盘、串口、控制台等。而...
  • engineer00
  • engineer00
  • 2011-02-15 17:42
  • 279

Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析

一、VFS 虚拟文件系统基础概念         Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File S...
  • zqixiao_09
  • zqixiao_09
  • 2016-03-11 23:39
  • 2422

Linux 字符设备驱动开发基础(五)—— ioremap() 函数解析

一、 ioremap() 函数基础概念        几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU...
  • qq_21593899
  • qq_21593899
  • 2016-06-19 18:09
  • 238

Linux 字符设备驱动开发基础(三)—— read()、write() 相关函数解析

我们在前面讲到了file_operations,其是一个函数指针的集合,用于存放我们定义的用于操作设备的函数的指针,如果我们不定义,它默认保留为NULL。其中有最重要的几个函数,分别是open()、r...
  • sehanlingfeng
  • sehanlingfeng
  • 2017-11-29 23:37
  • 41
    个人资料
    • 访问:142917次
    • 积分:3266
    • 等级:
    • 排名:第12086名
    • 原创:183篇
    • 转载:200篇
    • 译文:0篇
    • 评论:6条