#1 设备驱动程序的做用
&
设备驱动程序的做用在于提供机制,而不是策略。
所谓机制,即“须要提供什么样的功能”;所谓“策略”,即“如何使用这些功能”。前者精于设计,专一细节;后者实现调用,不须要知道任何与硬件相关的信息。
&
决定设备驱动一般不带策略的主要缘由是:不一样的环境须要不一样的方式来使用硬件,而设备驱动针对底层硬件,不可能为每一种方式都编写一个策略。所以,咱们让驱动程序提供机制,而让系统高层提供策略。
固然,有时候咱们也要在驱动程序当中实现一些策略。例如,某个数字 I/O 驱动程序只提供以字节为单位访问硬件的方法,这样就能够避免编写额外的代码来处理单个数据位的麻烦。
&
不带策略的驱动程序的典型特征:
1) 同时支持同步与异步操做;
2) 驱动程序可以被屡次打开;
3) 充分利用硬件特性;
4) 不具有用来“简化任务”的 或 提供与策略相关的软件层。
&
实际上,许多设备驱动程序是与用户程序一块儿发行的。这些用户程序主要用来帮助配置和访问目标设备。同时附带发行的还有一个客户程序库,它提供了那些没必要在驱动程序自己实现的功能。
#2 内核功能划分
& 进程管理:建立和销毁进程,进程处理,进程间通讯,进程调度;
[架构相关代码——CPU]
& 内存管理:内核在有限的可用资源之上为每一个进程都建立了一个虚拟地址空间,内核的不一样部分在和内存管理子系统交互时使用一组函数调用;
[内存管理器——内存]
& 文件系统:内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系统中普遍使用;文件系统是一个软件驱动程序,它将底层数据结构映射到高层数据结构;
不一样的文件系统类型,表明着在块设备上组织数据的不一样方式;[文件系统类型和块设备——磁盘和CD]
& 设备控制:几乎每个系统操做最终都会映射到物理设备上,除了极少数的几个对象以外,全部的设备控制操做都由被控制设备相关的代码来完成,这段代码就叫作驱动程序;
[字符设备——控制台]
& 网络功能:因为数据包的传入是异步事件,所以大部分网络操做与具体进程无关,而必须由内核来完成;
[网络子系统和 IF drivers——网络接口]
#3 可装载模块和模块的分类
& 内核提供的特性可在运行时进行扩展,扩展包括添加和移除,这些可被扩展的代码称为“模块”;每一个模块由目标代码组成,咱们可使用 insmod 将模块链接到正在运行的内核,也可使用 rmmod 移除链接;
& 在内核中以模块方式实现的功能:文件系统类型、块设备、字符设备、IF drivers 等;
&
Linux 系统将设备分为三种基本类型:字符设备、块设备、网络设备;
1) 字符设备:字符设备是个可以像字节流同样被访问的设备,
字符设备驱动程序应至少实现 open 、close、read 和 write 调用;字符设备能够经过文件系统节点来访问,例如:/dev/tty1 和 /dev/lp0 等;字符设备文件与普通文件的惟一区别在于,
大多数(除极少数以外)字符设备文件是一个只能顺序访问的数据通道,而对普通文件的访问则能够先后移动访问位置;
2) 块设备:和字符设备同样,块设备也是经过 /dev 下的文件系统节点来访问的,不一样的是,块设备上能够容纳文件系统;
块设备和字符设备的区别仅仅在于内核内部管理数据的方式,而这些对用户是不透明的;
3) 网络设备(接口):任何网络事务都通过一个网络接口造成;网络接口由内核中的网络子系统驱动,负责发送和接收数据包,但不涉及数据包的映射问题;
因为不是面向流的设备,所以不将网络接口映射到文件系统节点,而是经过给它们分配一个惟一的名字(如eth0);
#4 Linux 内核版本编号
&
内核版本号:
以版本号 2.6.9-5.ELsmp
为例:
r: 2 , 主版本号网络
x: 6 , 次版本号,偶数表示稳定版本,奇数表示开发中版本数据结构
y: 9 , 修订版本号 , 表示修改的次数架构
头两个数字合在一齐能够描述内核系列。如稳定版的2.6.0,它是2.6版内核系列。异步
-5: 表示这个当前版本的第5次微调 patch 函数
ELsmp : 指出了当前内核是为 EL 和 smp特别调校的spa
EL : Enterprise Linux ; smp : 表示支持多处理器设计
另外,还有支持大内存版本的 bigmem 或 hugemem对象