Linux驱动程序简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sophisticated_/article/details/82983153

设备驱动程序使某个特定硬件响应一个定义良好的内部编程接口,这些接口隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。

设备驱动程序的作用

驱动程序作用在于提供机制,而不是策略。
大多数编程问题实际上可以分成两部分:需要提供什么功能(机制),如何使用这些功能(策略)。这两个部分由程序不同部分来处理,或者甚至由不同的程序来处理,则这个软件包更容易开发。

驱动程序应该处理如何使用硬件可用的问题,而将怎么样使用硬件的问题留给上层应用程序。从另一角度看,驱动程序使应用程序与实际设备之间的软件层。

不带策略的驱动程序包括一些典型特征:同时支持同步和异步操作,驱动程序能够被多次打开,充分利用硬件特性等。

内核功能划分

  • 进程管理
    负责创建销毁进程,处理它们和外部世界的连接。处理进程通信,进程调度。
  • 内存管理
    内核为每个进程都创建了一个虚拟地址空间,内核不同部分在和内存管理子系统交互时都是用一组函数调用,包括malloc/free。
  • 文件系统
    Unix中每个对象几乎都可以当做文件,内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系统中广泛使用。Linux支持多种文件系统,也就是在物理介质上组织数据不同的方式。
  • 设备控制
    几乎每一个操作系统最终都会映射到物理设备上,除了处理器,内存及其他有限几个对象,所有设备控制操作都由与被控制设备相关的代码完成,这段代码就叫驱动程序。内核必须为每件外设嵌入相应的驱动程序,包括键盘,磁带驱动器。
  • 网络功能
    大部分网络操作与具体进程无关,数据包的传入是异步事件。在某个进程处理这些数据包之前必须收集,标识,和分发这些数据包。系统负责在应用程序和网络接口之间传递数据包,

在这里插入图片描述

可装载模块

内核提供的特性可在运行时进行扩展。insmod将模块连接到正在运行的内核,也可使用rmmod移除连接。

设备和模块分类

linux系统将设备分三类,每个模块通常实现为其中一类:字符模块,块模块,网络模块。

  • 字符设备:
    像字节流一样被访问的设备,字符设备驱动程序至少要实现open,close,read,write系统调用。字符终端和串口就是两个字符设备。字符设备可通过文件系统节点来访问,如/devtty1和/dev/lp0。
  • 块设备
    块设备也是通过/dev目录下的文件系统节点访问,块设备能够容纳文件系统,进行I/O操作时块设备每次只能传输一个或多个完整的块,而每块包含512字节(2的更高次幂字节数)。因此,块设备和字符设备的区别在于内核管理数据的方式。
  • 网络接口
    任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备。许多网络连接是面向流的,但网络设备却围绕数据包的传输和接收设计。网络驱动程序不需要知道各个连接的相关信息,只需要处理数据包即可。
    由于不是面向流的设备,因此将网络接口映射到文件系统中的节点比较难,Unix访问网络接口的方法仍然是分配一个唯一的名字(如eth0),但这个名字在文件系统中不存在对应的节点。

猜你喜欢

转载自blog.csdn.net/Sophisticated_/article/details/82983153