keep moving
分类: 嵌入式
2009-12-30 22:26:47
Linux Device Drivers英文原版pdf下载地址
Linux Device Drivers中文译版网址
有能力还是看英文原版,毕竟原汁原味。中文译版,翻译的一般,读起来有些拗口。
第一章都是些基本概念和常识性的东西,我按我的理解摘了一点。不一定正确,可能有些偏差。
驱动的角色:是存在于应用程序与实际设备间的软件层,为应用程序操作设备提供了必需的接口。驱动提供的是一种机制(具有什么能力,能做什么),至于具体的策略(怎么做,如何使用这些能力)完全是应用程序的事。
可加载模块:Linux可以在运行时扩展由内核提供的功能。每块可以在运行时添加到内核的代码, 被称为一个模块。每个模块由目标代码组成( 没有连接成一个完整可执行文件 ), 可以动态连接到运行中的内核中(通过 insmod将模块加载到内核,也通过 rmmod 将模块从内核中卸载下来)。
设备分类:字符设备、块设备和网络设备。
安全问题:系统中任何安全检查都由内核代码强加上去。如果内核有安全漏洞, 系统作为一个整体就有漏洞。在可能时, 驱动编写者应当避免将安全策略编到他们的代码。但驱动最终都会加载到内核中,驱动存在安全问题,势必引起内核安全隐患。因此,在必要时候,应当提供足够地控制(如设置一条中断线,这种会影响全局资源的设备操作),并避免引入安全bug(忘了检查有多少数据写入缓冲区,导致缓冲区溢出,覆盖了无关的数据)。
下面是一些必须牢记的安全观念:
1、任何从用户进程接收的输入应当以极大的怀疑态度来对待; 除非你能核实它, 否则不要信任它。
2、小心对待未初始化的内存; 从内核获取的任何内存应当清零或者在其对用户进程或设备可用之前进行初始化. 否则, 可能发生信息泄漏( 数据, 密码的暴露等等 )。
3、 如果你的设备解析发送给它的数据, 要确保用户不能发送任何能危及系统的东西。
4、最后, 考虑一下设备操作的可能后果; 如果有特定的操作( 例如, 加载一个适配卡的固件或者格式化一个磁盘 ), 能影响到系统的, 这些操作应该完全确定地要限制在授权的用户中。
Linux内核编号(命名)机制:
num.num.num
其中第一个数字是主版本号,第二个数字是次版本号,第三个数字是修订版本号,如果次版本号是偶数,那么该内核就是稳定版的;若是奇数,则是开发版的,头两个数字合在一齐可以描述内核系列,如稳定版的2.6.0,它是2.6版内核系列。