开发板:tiny6410
虚拟机:Fedora 9
本驱动程序是根据tiny6410 开发文档中LED灯驱动程序改写,由于第一次接触驱动程序开发,第一次这么直接的操作硬件, 所以难免会有不准确的地方,希望大家见谅。
首先我来补充一下,驱动程序开发的基础知识。其实也是在开发这个驱动程序时新学的,看的书是北京航空航天大学出版社郑灵翔主编的《嵌入式接口技术与linux驱动程序开发》,似乎写的还不错,暂时我只看了一丢丢。
Linux中设备都是以文件的形式管理的,虽然挺难理解,但是现在就先有这个概念吧,操作一个字符设备,就当做是操作一个/root/目录下的一个普通文件吧(例如hello.c),手写操作hello.c,我们需要打开这个文件,当然字符设备不会像hello.c一样,双击就能打开,稍微有点Linux基础的人都知道,宏观上任何一个动作,实际上都是以命令的形式发送的,至于windows中双击打开一个文件,实际底层实现时也是通过向内核发命令实现的。好了,这就不多说了,在Linux中打开一个字符设备,是通过open函数来实现的。驱动程序的编译分为两种,一种是被编译为动态可加载的内核模块,通过insmod、rmmod命令加载和移除,一般我们采用这种方法。因为编译成内核模块还的重写烧写BIOS,不利于驱动程序的调试。 tiny6410开发文档中使用的是modprobe加载,两者有一定区别,大家可以百度一下,另一种是被静态编译至内核,这样每次使用时就不用自己挂载了。系统启动(实际是内核初始化)时,自动加载驱动。
在Linux2.6之后内核编译引入了kbuild,将外部内核模块的编译同内核源码树的编译统一起来。在内核源码树中的模块编译与对应目录下的Kconfig文件和Makefile文件有关。其中,分布在内核源码树各个子目录中的Kconfig文件将构成了一个分布式的内核配置数据库,描述了内核配置菜单项的所有内容,每个Kconfig文件分别描述了所属目录源文件相关的内核配置菜单项。在用户运行内核配置命令进行内核配置时,内核配置命令从各个Kconfig文件中读出内核配置菜单项,并将配置菜单显示给用户。用户配置完内核后,其所选的内核配置被存入选项配置文件“.config”中,它在内核编译时被读入Makefile,作为相应菜单项的配置变量,成为Makefile的一部分。(不是太理解???没关系,自己按着开发文档中编译内核驱动的步骤做一遍,再来理解这句话,就能看懂了。通常任何一个语言、任何一向东西的入门都