在开发一个驱动程序之前,要先做许多配置工作,首先是要把2.6.32.2版本linux内核拷贝到ubuntu10.10其中一个文件夹中,linux内核版本号必须得跟开发板内核版本一样。本设计把内核放在共享文件夹(share)中,然后再修改内核中linux2.6.32.2/driver/char文件夹里面的Kconfig脚本文件,本设计采用putty远程登录到ubuntu系统,并用串口线打印信息到PC显示器。用vi编译器开发出来的超声波驱动程序的名称是TIMER_IRQ ,在Kconfig脚本文件里面添加TIMER_IRQ的代码如下:
config TIMER_IRQ
tristate
"TIMER_IRQ Support for Mini2440 GPIO IRQ"
depends
on MACH_MINI2440 default m if MACH_MINI2440
help
This option enables support for TIMER_IRQ connected to GPIO
lines
on Mini2440 boards.
完成之后保存退出,然后用指令cd退回到linux2.6.32.2路径下,敲指令make menuconfig
后会出现内核配置界面,如下图20:
蓝色标识那一行就是新配置成的块编译项,左边中括号里的“M”表示编译成模块形式,不需要编译的模块必须得把“M”选项去掉,换成空格形式,以后在编译模块的时候内核就会根据这个配置项来编译驱动程序。
上面修改Kconfig脚本文件只是实现在了通知内核该编译哪些驱动程序,至于内核是怎样编译驱动程序的还需要修改Makefile文件,添加了连接代码之后内核每次在编译时就会找到源驱动代码,以及编译成目标代码。同样用切换指令cd进入/driver/char/路径下,用vi编译器打开Makefile文件,敲入指令为
vi Makefile,出现如图21所示:
在脚本文件里面添加如下代码:
obj-$(CONFIG_TIMER_IRQ) +=
timer_irq.o
CONFIG_TIMER_IRQ是配置好的源代码名称,timer_irq.o是内核要编译成的目标文件。
配置好了Makefile文件之后,回到linux2.6.32.2路径下,敲入make modules
指令,内核开始编译驱动程序,编译过程如:后生成了timer_irq.ko文件,说明程序编译成功,如下图22:
最后把timer_irq.ko二进制文件下载到ARM9开发板,就可以开始调试运行了。下载程序步骤如下,首先是把timer_irq.ko文件拷贝到ubuntu的nfsroot目录下:
cp linux2.6.32.2/driver/char/timer_irq.ko
~/nfsroot
回车后没提示任何信息则拷贝成功,然后启动开发板,如下图21,kermit串口已经连接通了,再挂载共享文件,敲入如下命令:
mount –t nfs 202.192.33.129:/home/linter/nfsroot /mnt –o
nolock
回车后没提示任何信息则挂载成功,回到开发板终端,进入mnt目录:
cd /mnt
可以看到timer_irq.ko文件,再把timer_irq.ko文件下载进内核,如下命令:
insmod timer_irq.ko
这样超声波模块的驱动程序开发并下载成功,如下图23。