Android驱动

Linux设备驱动简介

2017-05-24  本文已影响81人  一只好奇的茂

linux中三种驱动设备

linux系统将设备分为3类:字符设备、块设备、网络设备。


字符设备与块设备的区别

  1. 字符设备是面向流的,最小访问单位是字节;而块设备是面向块的,最小访问单位是512字节或2的更高次幂。
  2. 字符设备只能顺序按字节访问,而块设备可随机访问。
  3. 块设备上可容纳文件系统,访问形式上,字符设备通过设备节点访问,而块设备虽然也可通过设备节点访问,但一般是通过文件系统来访问数据的。
  4. 网络设备没有设备节点是因为,网络设备是面向报文的,很难实现相关read、write等文件读写函数。所以驱动的实现也与字符设备和块设备不同。

字符设备与块设备的区分

每一个字符设备或者块设备都在/dev目录下对应一个设备文件。读者可以通过查看/dev目录下的文件的属性,来区分设备是字符设备还是块设备。使用cd命令进入/dev目录,并执行ls -l命令就可以看到设备的属性

[root@tom /]# cd /dev                           /*进入/dev目录*/  
[root@tom dev]# ls -l                           /*列出/dev中文件的信息*/、 
 /*第1字段     2    3    4      5    6         7      8  */  
crw-rw----+     1 root root    14,  12  12-21 22:56 adsp  
crw-------      1 root root    10, 175  12-21 22:56 agpgart  
crw-rw----+     1 root root    14,   4  12-21 22:56 audio  
brw-r-----      1 root disk   253,   0  12-21 22:56 dm-0  
brw-r-----      1 root disk   253,   1  12-21 22:56 dm-1  
crw-rw----      1 root root    14,   9  12-21 22:56 dmmidi

ls -l命令的第1个字段中的第1个字符c表示设备是字符设备,b表示设备是块设备;
第234字段对驱动程序开发来说没有关系;
第5,6字段分别表示设备的主设备号和次设备号;
第7字段表示文件的最后修改时间。第8字段表示设备的名字。
由第1和8字段可知,adsp是字符设备,dm-0是块设备。其中adsp设备的主设备号是14,次设备号是12。

混杂设备

在linux系统中,存在一类字符设备,它们共享一个主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查找到相应的miscdevice设备。

  1. 相对字符驱动而言,内核封装好了api,相对更容易开发;
  2. 由于只占用一个从设备号,故而每一个驱动都只能用于一个设备,无法和字符驱动比,能够用于多个设备;


驱动开发流程

  1. 查看原理图,理解设备的工作原理。
  2. 定义主设备号。
    设备由一个主设备号和一个次设备号来标识。主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅
    由设备驱动程序解释,区分被一个设备驱动控制下的某个独立的设备。
  3. 实现初始化函数。在驱动程序中实现驱动的注册和卸载。
  4. 设计所要实现的文件操作,定义file--operations结构。
  5. 实现所需的文件操作调用,如read,write等。
  6. 实现中断服务,并用request--irq向内核注册,中断并不是每个设备驱动所必需的。
  7. 编译该驱动程序到内核中,或者用insmod命令加载模块。
  8. 测试该设备,编写应用程序,对驱动程序进行测试。

参考

linux驱动开发流程
linux设备驱动第一篇:设备驱动程序简介
Linux设备驱动开发 - 混杂设备驱动

上一篇 下一篇

猜你喜欢

热点阅读