21:50-22:38 50分钟
#前言
内容的组织
两大部分:
第一部分(第一到第十一章)如何编写内核模块,编写功能完备的字符设备驱动程序所涉及的各个编程主题。
第二部分(第十二到第十八章)讲述块设备驱动程序和网络接口
#第一章设备驱动程序简介
用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。
设备驱动程序的作用
驱动程序的作用在于提供机制,而不是提供策略。【Q:什么意思?】
大多数编程问题都可以分成两部分:“需要提供什么功能”(机制)“如何使用这些功能”(策略)
一个类似ftpd这样的服务器提供文件传输机制,用户可以使用任何自己喜欢的客户端传输文件,例如命令行和图形客户端
驱动程序同样存在机制和策略的分离问题。例如,软驱的驱动程序不带策略,它的作用是将磁盘表示为一个连续的数据块阵列。系统高层负责提供策略,比如谁有权限访问软盘驱动器。
在编写驱动程序时,程序员应该特别注意下面这个基本概念:编写访问硬件的内核代码时,不要给用户强加任何特定策略。
驱动程序设计主要还是综合考虑下面三个方面的因素:提供给用户净量多的选项,编写驱动程序要占用的时间以及尽量保持程序简洁而不至于错误丛生。
不带策略的驱动程序包括一些典型特征:同时支持同步和异步操作,驱动程序能够被多次打开,充分利用硬件特性,以及不具备用来简化任务的或提供与策略相关的软件层。
内和功能划分
进程管理,内存管理,文件系统,设备控制和网络功能。
可装载模块
insmod, rmmod
安全问题
驱动程序编写者应当尽量避免在代码中实现安全策略。安全策略问题最好在系统管理员的控制之下,由内核的高层来实现。
c语言缓冲区溢出
任何从用户进程得到的输入只有经过内核严格验证后才能使用。
我们还必须小心未初始的内存。任何从内核得到的内存,都必须在提供给用户进程之前清零或以其他方式初始化,否则就可能发生信息泄露。
某些特定操作如格式化磁盘,可能影响整个系统,则应当将此类操作限制于特权用户
小心第三方软件。