Linux操作系统下的PCI驱动开发
Linux下驱动程序模块的加载通常有静态加载和动态加载两种方式。动态加载是利用Linux的module特性,在系统启动后使用insmode命令把驱动程序(.o文件)添加上去,然后通过rmmod命令卸载,这种加载方式有利于程序的调试,可以随时更改;静态加载就是把驱动程序直接编译到内核里,在系统启动后直接调用,显然这种方式对于调试阶段的程序比较麻烦,而且效率较低,因而只适用于最终版本的程序。因此,程序开发者通常先用动态加载方式来调试,调试完毕后,再编译到内核里使用。
静态加载时,通常先把驱动程序原文件放在内核驱动相应类型的文件夹下,这里的PCI驱动属于字符类型,可拷贝到…\linux-2.4.x\drivers\char下。然后再更改…\linux-2.4.x\drivers\char\Makefile文件,并添加如下语句:
这样做的目的是根据编译选项$( CON-FIG_PLX9054)来决定是否要添加设备驱动。
之后,再在…\linux-2.4.x\drivers\char\Config.in中添加语句tristate’PLX9054 Support’CONFIG_PLX9054,这样就可以在运行menuconfig时产生与设备对应的编译选项,图2所示是其编译选项界面图。图中,在前面的尖括号中点Y表示静态加载,点M表示作为模块动态加载。
最后,运行make menuconfig,剪切内核,并选中需要的模块所对应的编译选项,编译内核。
5 驱动程序的测试
由于所编写的驱动程序是在PLX官方驱动的基础上得来的,因此,在这里,为了方便测试起见,也应使用PLX公司的SDK包中的测试程序来查看PCI9054的配置情况,图3所示为五个基址寄存器的映射情况。图4所示为公共缓冲区的映射情况示意图。
6 结束语
本文首先介绍了在Linux下开发PCI驱动的方法,然后介绍了如何将驱动静态编译到内核,这种方法非常适用于开发以Linux作为嵌入式系统的驱动程序。可以看出,由于Linux系统完全开源,其驱动程序较Windows下的驱动程序简单易懂,框架感更强。此外,由于其具有丰富的开源资源,故其开发成本较低。因此,我们有理由相信,Linux在未来的操作系统市场中的地位会变得越来越重要。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论