笔记

1.驱动程序的类型?

Linux 设备驱动程序包含中断处理程序和设备服务子程序两部分。

设备服务子程序包含所有与设备操作相关的处理代码。它从面向用户进程的设备文件系统中接 受用户命令,并对设备控制器执行操作。设备驱动程序屏蔽了设备的特殊性,使用户可以像对 待文件一样操作设备。
设备控制器获得系统服务有两种方式:查询和中断。Linux 的设备驱动程序是内核的一部分,在设 备查询期间系统不能运行其他代码,查询方式的工作效率比较低,所以只有少数设备如软盘驱动程序采取这种方式,大多设备以中断方式向设备驱动程序发出输入/输出请求。
笔记_第1张图片

2.驱动程序的开发过程?

  • 编写驱动程序初始化函数
  • 构造file_operations结构中要用到的各个成员函数
  • 设备的中断和轮询处理
  • 驱动程序的测试

实现一个嵌入式Linux设备驱动程序的大致流程如下:

  1. 查看原理图,理解设备的工作原理。

  2. 定义主设备号。设备由一个主设备号和一个次设备号来标识。主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,区分被一个设备驱动控制下的某个独立的设备。

  3. 实现初始化函数。在驱动程序中实现驱动的注册和卸载。

  4. 设计所要实现的文件操作,定义file--operations结构。

  5. 实现所需的文件操作调用

  6. 实现中断服务,并用request--irq向内核注册,中断并不是每个设备驱动所必需的。

  7. 编译该驱动程序到内核中,或者用insmod命令加载模块。

  8. 测试该设备,编写应用程序,对驱动程序进行测试

3.设备为什么和磁盘文件用一样系统调用操作?

Linux的一个重要特点就是将所有的设备都当做文件进行处理,这一类特殊文件就是设备文件,他们可以使用前面提到的文件,I/o相关函数进行操作,这样就大大方便了对设备的处理。它通常在/dev下面存在一个对应的逻辑设备节点,这个节点以文件的形式存在。

Linux 中的设备驱动程序有如下特点。

  1. 内核代码:设备驱动程序是内核的一部分,如果驱动程序出错,则可能导致系统崩溃。

  2. 内核接口:设备驱动程序必须为内核或者其子系统提供一个标准接口。比如,一个终端驱动程序 必须为内核提供一个文件 I/O 接口;一个 SCSI 设备驱动程序应该为 SCSI 子系统提供一个 SCSI 设备接 口,同时 SCSI 子系统也必须为内核提供文件的 I/O 接口及缓冲区。

  3. 内核机制和服务:设备驱动程序使用一些标准的内核服务,如内存分配等。

  4. 可装载:大多数的 Linux 操作系统设备驱动程序都可以在需要时装载进内核,在不需要时从内核中卸载。

  5. 可设置:Linux 操作系统设备驱动程序可以集成为内核的一部分,并可以根据需要把其中的某一部分 集成到内核中,这只需要在系统编译时进行相应的设置即可。

  6. 动态性:在系统启动且各个设备驱动程序初始化后,驱动程序将维护其控制的设备。如果该设备驱 动程序控制的设备不存在也不影响系统的运行,那么此时的设备驱动程序只是多占用了一点系统内存罢了。

你可能感兴趣的:(笔记)