一、设备驱动程序
1、编写Linux设备驱动程序的原因
1)、新硬件问世(或过时)到的速度会使驱动程序编写人员面临很多任务。
2)、个人用户可能需要了解一些驱动程序知识才能访问设备。
3)、硬件厂商通过提供Linux驱动程序能为自己的产品带来数目庞大且日益增长的潜在用户群。
4)、Linux系统是开源的,如果驱动程序作者愿意,驱动程序源代码就可以在大量用户中间迅速流传。
2、编程问题的两个部分:“需要提供什么功能”(机制)和“如何使用这些功能”(策略)。设备驱动程序的作用在于提供机制,而不是提供策略,它同样存在机制和策略的分离问
题。
3、在编写驱动程序时,程序员应该改特别注意:编写访问硬件的·内核代码时,不要给用户强加任何特定策略。总的来说,驱动程序设计主要考虑以下三个方面的因素:
1)、提供给用户尽量多的选项。
2)、编写驱动程序占用的时间。
3)、尽量保持程序简单而不至于错误丛生。
4、不带策略的驱动程序的典型特征:
1)、同时支持同步和异步操作。
2)、驱动程序能够被多次打开。
3)、充分利用硬件特性。
4)、不具备用来“简化任务”的或提供与策略相关的软件层。
二、内核功能的划分(P13 图1-1)
1、内核功能划分
1)、进程管理。
2)、内存管理。
3)、文件系统。
4)、设备控制。
5)、网络功能。
2、可装载模块
1)、Linux有一个很好的特性:内核提供的特性可在运行时进行扩展。这意味着当系统启动并运行时,可以向内核添加功能。
2)、可以在运行时添加到内核中的代码被称为模块。
三、设备和模块的分类
1、设备基本类型
1)、字符设备
2)、块设备
3)、网络接口。
2、其他划分驱动程序模块类型的方法
1)、一般而言,某些驱动程序类型同内核用来支持某种给定类型设备的附加层一起工作。除了设备驱动程序,内核其他一些功能(不管是硬件功能还是软件功能)都被模块
化(如文件系统)。
四、安全问题
1、驱动程序编写者应当尽量避免在代码中实现安全策略。安全策略问题最好在系统管理员的控制之下,由内核的高层来实现。当然会有例外。
2、驱动程序编写者还应当避免由于自身原因引入安全方面的缺陷。
3、任何从用户空间得到的输入只有经过内核严格验证后才能使用。
4、必须小心对待未初始化的内存。
5、应当考虑设备操作可能造成的影响:如果某些特定操作可能影响整个系统,则应当将此类操作限于特权用户。
6、应当小心使用从第三方获得的软件,特别是与内核有关时更是如此。
五、版本编号
1、对内核来讲,偶数编号(如2.6.x)的内核版本是用于正式发行的稳定版本,而奇数编号(如2.7.x)的版本则是开发过程中的一个快照。
六、许可证条款
1、Linux遵循GNU公用许可证版本2发布。GPL由自由软件基金会为GNU项目设计,它允许任何人重新发行甚至销售由GPL条款保护的产品,前提是产品接受者能够获得源码
并拥有同样的权利。
七、加入内核开发社团