01 设备驱动程序简介


     设备驱动程序的作用在于提供机制,而不是策略。     所谓机制,即“需要提供什么样的功能”;所谓“策略”,即“如何使用这些功能”。前者精于设计,专注细节;后者实现调用,不需要知道任何与硬件相关的信息。        不同的环境需要不同的方式来使用硬件,而设备驱动针对底层硬件,不可能为每一种方式都编写一个策略。因此,我们让驱动程序提供机制,而让系统高层提供策略。     当然,有时候我们也要在驱动程序当中实现一些策略。例如,某个数字 I/O 驱动程序只提供以字节为单位访问硬件的方法,这样就可以避免编写额外的代码来处理单个数据位的麻烦。                    1) 同时支持同步与异步操作;         2) 驱动程序能够被多次打开;         3) 充分利用硬件特性;         4) 不具备用来“简化任务”的 或 提供与策略相关的软件层。       实际上,许多设备驱动程序是与用户程序一起发行的。这些用户程序主要用来帮助配置和访问目标设备。同时附带发行的还有一个客户程序库,它提供了那些不必在驱动程序本身实现的功能。     #2 内核功能划分        进程管理:创建和销毁进程,进程处理,进程间通信,进程调度;        内存管理:内核在有限的可用资源之上为每个进程都创建了一个虚拟地址空间,内核的不同部分在和内存管理子系统交互时使用一组函数调用;        文件系统:内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系统中广泛使用;文件系统是一个软件驱动程序,它将底层数据结构映射到高层数据结构;        设备控制:几乎每一个系统操作最终都会映射到物理设备上,除了极少数的几个对象之外,所有的设备控制操作都由被控制设备相关的代码来完成,这段代码就叫做驱动程序;        网络功能:由于数据包的传入是异步事件,因此大部分网络操作与具体进程无关,而必须由内核来完成;     #3 可装载模块和模块的分类        内核提供的特性可在运行时进行扩展,扩展包括添加和移除,这些可被扩展的代码称为“模块”;每个模块由目标代码组成,我们可以使用 insmod 将模块连接到正在运行的内核,也可以使用 rmmod 移除连接;           在内核中以模块方式实现的功能:文件系统类型、块设备、字符设备、IF drivers 等;                 1) 字符设备:字符设备是个能够像字节流一样被访问的设备,,例如:/dev/tty1 和 /dev/lp0 等;字符设备文件与普通文件的唯一区别在于,,而对普通文件的访问则可以前后移动访问位置;         2) 块设备:和字符设备一样,块设备也是通过 /dev 下的文件系统节点来访问的,不同的是,块设备上可以容纳文件系统;,而这些对用户是不透明的;         3) 网络设备(接口):任何网络事务都经过一个网络接口形成;网络接口由内核中的网络子系统驱动,负责发送和接收数据包,但不涉及数据包的映射问题;;     #4 Linux 内核版本编号        内核版本号: 以版本号 2.6.9-5.ELsmp 为例:

    r:   2 , 主版本号

    x:  6 , 次版本号,偶数表示稳定版本,奇数表示开发中版本

    y:  9 , 修订版本号 , 表示修改的次数

    头两个数字合在一齐可以描述内核系列。如稳定版的2.6.0,它是2.6版内核系列。

    -5:  表示这个当前版本的第5次微调 patch 

    ELsmp : 指出了当前内核是为 EL 和 smp特别调校的

    EL : Enterprise Linux ; smp : 表示支持多处理器

    另外,还有支持大内存版本的 bigmem 或 hugemem

 

 

相关内容