第一章 设备驱动程序简介

unix内核功能划分:

内核功能划分如上图:

进程管理:进程管理功能负责创建和销毁进程,并处理它们和外部世界之间的连接。不同进程之间的通信是整个系统的基本功能,因此也由内核处理。除此之外,控制进程如何共享cpu的调度器也是进程管理的一部分。概括来说,内核进程管理活动就是在单个或多个cpu上实现多个进程的抽象。

内存管理:内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关键因素。内核在有限的可用资源之上为每个进程都创建了一个虚拟地址空间。内核的不同部分在和内存管理子系统交互时使用一组函数调用,包括简单的malloc/free函数对以及其他一些复杂的函数。

文件系统:unix在很大程度上依赖于文件系统的概念,unix中的每个对象几乎都可以当作文件来看待。内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系统中广泛使用。另外,Linux支持多种文件系统类型,也就是在物理介质上组织数据的不同方式。例如,磁盘可以格式化为符合Linux 标准的ext3文件系统,也可以格式化为常见fat文件系统或者其他种类

设备控制:几乎每一种系统操作最终都会映射到物理设备上。除了处理器,内存以及其他很有限的几个对象外,所有设备控制操作都由与被控制设备相关的代码来完成,这段代码就叫做驱动程序。内核必须为系统中的每件外设嵌入相应的驱动程序,这句话硬件驱动器,键盘和磁带驱动器等。这方面的内核功能将是本书讨论的主题

网络功能:网络功能也必须由操作系统开管理,因为大部分网络操作和具体进程无关;数据包的传入是异步事件。在某个进程处理这些数据包之前必须收集,标识和分发这些数据包。系统负责在应用程序和网络接口之间传递数据包,并根据网络网络活动控制程序的执行。另外,所有的路由和地址解析问题都由内核处理。

 

 

可装载的模块:

   Linux内核提供的特性可在运行时进行扩展。这意味着当系统启动并运行时,我们可以向内核添加功能(insmod)/移除功能(rmmod)。可在运行时添加到内核中的代码被称为“模块”。

 

设备和模块的分类:

Linux系统将设备分成三种基本类型,每个模块通常实现为其中某一类:字符模块,块模块或网络模块。然而这种将模块分成不同类型或类的分类方式并不是非常严格,程序员可以构造一个大的模块。在其中实现不同类型的设备驱动程序。然而,优秀的程序员通常还是为每个新功能创建一个不同的模块,从而实现良好的伸缩性和扩展性。

字符设备:字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少要实现open,close,read和write系统调用。字符终端(/dev/console)和串口(/dev/ttys0以及类似设备)就是两个字符设备,它们能够很好地说明“流”这种抽象概念。字符设备可以通过文件系统节点来访问,比如/dev/tty1和/dev/lp0等。这些设备文件和普通文件之间唯一差别在于普通文件地访问可以前后移动访问位置,而大多数字符设备是一个个只能顺序访问的数据通道。然而,也存在具有数据区特性的字符设备,访问它们时可前后移动访问位置。例如,桢抓取器就是这样一个设备,应用程序可以用mmap或lseek访问抓取的整个图像。

块设备:和字符设备一样,块设备也是通过/dev目录下的文件系统节点来访问。块设备上能够容纳文件系统。Linux可以让应用程序像字符设备一样的读取块设备,允许以此传递任意多子节的数据。因而块设备和字符设备的区别仅仅在于内核内部管理数据的方式也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。在内核中,和字符驱动程序相比,块驱动程序具有完全不同的接口。

网络接口:任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备。通常,接口是个硬件设备,但也可能是个纯软件设备,比如回环(loopback)接口。网络接口由内核中的网络子系统驱动,负责发送和接受数据包,但它不需要了解每项事务如何映射到实际传送到数据包。许多网络连接是面向流的,但网络设备却围绕数据包的传输和接受而设计。网络驱动程序不需要知道各个连接的相关信息,它只要处理数据包即可。

由于不是面向流的设备,因此将网络接口映射到文件系统中的节点(比如/dev/tty1)比较困难。unix访问网络接口的方法仍然是给它们分配一个唯一的名字(比如eth0),但这个名字在文件系统中不存在对应的节点。内核和网络设备驱动程序间的通信,完全不同于内核和字符以及块驱动程序之间的通信,内核调用一套和数据包传输相关的函数而不是read,write等。

对内核来讲,偶数编号(2.6.x)的内核版本是用于正式发布的稳定版本,而奇数编号(2.7.x)的版本则是开发过程中的一个快照,它将很快被下一个开发版本更新。

 

本系列主要是参考《Linux设备驱动程序》记录的读书笔记,仅供学习参考,谢谢

作者林逋

                      长相思

吴山青,越山青,两岸青山相送迎。

谁知离别请?

君泪盈,妾泪盈,罗带同心结未成。

江头潮已平。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值