一、设备驱动程序概述自Linux在中国发展以来linux设备驱动开发详解 4.0 源码,得到了许多公司的偏爱。在国外的玩家也越来越多了suse linux 下载,但目前还是逗留在玩的水平上linux设备驱动开发详解 4.0 源码,极少有玩家对Linux的系统进行研究。由于它的开放,我们可以随时用来“把玩”。这也是Linux一个无可比拟的优势,这样我们可以更改后再加入到上面。但极少有专门的书籍提到Linux驱动程序的开发,像广州这样的大城市也极少有讲Linux驱动开发的资料,唉,谁让这个是人家的东西呢,我们还是得跟随人家跑。我如今讲的那些驱动开发的细节,并不特定那个版本的内核,这只是大体的思路与步骤。由于你们都晓得Linux2.6.x与Linux2.4.x是有不少改动的。所以,具体的你们可以去参考LinuxDeviceDriver2.4和LinuxDeviceDriver2.6这几本书。这是我们学习开发驱动必不可少的东西。好了,下边就开始学习吧。依据设备的行为,我们可以把设备分为字符设备和块设备,还有网路设备。字符设备是以字节为单位进行次序读写,数据缓冲系统对它们的访问不提供缓存。而块设备则是容许随机访问与读写,每次读写的数据量都是数据块厚度的整数倍,而且访问都会经过缓冲区缓存系统能够实现。
与Unix版本不同的是:Linux的内核容许不是数据块宽度整数倍的数据量被读取,用官方的语言就是:但这些不同只是纯粹学术方面的东西。大多数设备驱动程序都要通过文件系统来进行访问的,但网路设备是不同的。/dev子目录里都是关于设备的特殊文件,但看上去它们与普通的目录没有哪些两样。如下:$ls-l/dev...brw-rw---1rootdisk22,1May51998hdc1crw-rw---1rootdaemon60May51998lp0与普通文件有所不同是开头的“C”和“B”,即char和block的意思,即字符设备和块设备。再前面的“22,1”和“6,0”即设备的主设备号和次设备号,主设备号表明它是哪一种设备,这与你在Windows里添加硬件时听到的这些是一个意思。次设备号表明是哪一个具体的设备。内核对这个设备名称不怎样关心,它只关心它的类型和主设备号。这儿提一下怎样创建这种特殊文件:mknodnametypemajorminor,但你必须是root用户。
下边讲一下用户空间与内核空间:Linux运行在两种模式下,一种是内核模式,称作为超级用户模式;别一种是用户模式。Intel的X86(X>3),把自己的执行模式命名为Ring(环)0、1、2、3,第0环的优先级是最高的。在Linux里,第0环代表内核模式linux查看磁盘空间,第3环代表用户执行模式,其余两环是没有使用。所以,假若你有用户模式下访问硬件与I/O是不可能的。内核模块与内核进行链接,在使用的它们自己的向外提供的函数方面也是有限制的。一个做为内核模块编撰下来的设备驱动程序的运行并不是普通意义上的运行,模块中的符号是在它被加载到内核里去的时侯得到解析的。编撰内核的也是注意原则的:(1)不要使用浮点运算。内核在切换处理器执行模式时不保存它的FP状态,假如你要使