软讯网络 > 操作系统 > Linux > Linux Device Drivers学习笔记1--Chapter.1 An Inroduction of Device Drivers
【标 题】:Linux Device Drivers学习笔记1--Chapter.1 An Inroduction of Device Drivers
【关键字】:
Linux,Device,Drivers,1--Chapter.1,An,Inroduction,of,Device,Drivers
【来 源】:http://blog.csdn.net/xtrx/archive/2006/08/12/1054264.aspx
Linux Device Drivers学习笔记1--Chapter.1 An Inroduction of Device Drivers
前言:这些笔记都是我在学习Linux Device Drivers(影印版)中的一些感受和笔记,欢迎大家一起交流学习。在开始写这些笔记之前,我已经阅读到了第10章,所以会和后面的内容有一点穿插。
1.Linux设备驱动的学习和开发可以认为是从用户模式编程到内核编程的一个过度阶段。在这个阶段中,学习者一方面可以接受内核方面的知识,又不会一下子陷入到内核复杂,众多的代码之中,我认为是一种很好的缓冲方法。
2.设备驱动的目的是要实现“机制”(mechanism),而不是实现“策略”(police)。也就是说一个设备驱动要屏蔽掉底层硬件的不同,向上提供统一的操作接口,例如open/read等(这些接口由Linux定义)。而至于能否操作设备(权限问题)和怎么操作则是高一级的系统需要负责的问题。这里一点补充的就是关于对设备的并发操作还是需要设备驱动来负责的。
3.根据书中的原文“Each piece of code that can be added to the kernel at runtime is called a module"。那么就是说每个可以在运行期间加入到内核上的代码就是模块。Linux设备驱动就是Linux的一种模块(还有其他种类的模块),目前越来越多的功能正在被模块化。模块是由目标代码(object code)组成,还没由完全链接成为可执行的代码,用户可以使用insmod将其动态链接到内核上,使用rmmod将其卸载,使用lsmod查看当前系统中有哪些模块(排序为加载时间的倒序)。
4.设备分类
(1)字符设备,字符设备可以映射到/dev目录下,例如/dev/console。有的字符设备如同流一样,只能向前读取。有的字符设备则可以通过lseek来进行定位读取。
(2)块设备,块设备也可以映射到/dev目录下,但是块设备比之字符设备要复杂的多,内核实现上同字符设备也是完全不同的。
(3)网络设备,网络设备不能映射到文件系统中,系统通过一个唯一的名字来访问网络设备,例如eth0。