第12课 设备驱动

12.1 动态加载

动态加载利用内核模块特性,当驱动程序需要运行的时候就被加载执行,不需要的时候就卸载它,这个过程不需要重启操作系统。

加载的时候用insmod

卸载的时候用rmmod

首先,准备一个测试程序,该程序位于Lesson 12目录下的testgpio.c,按照第二课的方式,把他放在一个scu文件夹里,并修改Makefile文件。

动态加载步骤:

首先创建目录/work/uClinux-dist/linux-2.4.x/drivers/char/mvgpio,然后将驱动程序Lesson 12\dynamic\char\gpio.c拷贝到创建的目录下。并且在该目录下创建一个Makefile文件,代码如下图所示:

 

修改文件/work/uClinux-dist/linux-2.4.x/drivers/char/Config.in,在“tristate 'Standard/generic (8250/16550 and compatible UARTs) serial support' CONFIG_SERIAL”之前增加“tristate 'MVGPIO serial device support' CONFIG_MYDRIVER_MVGPIO”,如下图所示:

 

第三,修改/work/uClinux-dist/linux-2.4.x/drivers/char/Makefile文件,在“mod-subdirs:= joystick ftape drm drm-4.0 pcmcia”之后添加“mvgpio”,如下图:

 

同时在“obj-$(CONFIG_TS_AU1000_ADS7846) += au1000_ts.o”之后添加“subdir-$(CONFIG_MYDRIVER_MVGPIO) += mvgpio”,如下图:

 

第四,在/work/uClinux-dist目录下,执行sudo make config,进入内核配置,选择Character devices选项,将“MVGPIO serial device support”选择为“m”,如下图,如果没有选择,是不会产生mvgpio.o文件的。

 

保存退出,然后执行命令:sudo make modules,

到目录/work/uClinux-dist/linux-2.4.x/drivers/char/mvgpio下,将mvgpio.o文件复制到目录/work/uClinux-dist/romfs/lib/modules里。

 

最后在/work/uClinux-dist/目录下执行命令:sudo make image。

 

还有一步就是需要修改vendors/Marvell/Firefox/Makefile文件

 

这样在测试的时候才会在dev目录下产生mvgpio。

然后在/work/uClinux-dist/目录下执行sudo make,执行完以后,下载进开发板。

进入目录/lib/modules/下,使用insmod命令将驱动程序安装。

 

此时使用cat命令可以在/proc/modules目录下看到

 

使用cat可以查看设备号

 

运行testgpio测试程序,

 

能够读取文件里的内容

12.2 静态加载

静态加载是直接将驱动程序编写进内核,系统启动的时候就直接调用。

静态加载步骤:

首先,复制Lesson 12\static\char\mvgpio.c 到/work/uClinux-dist/linux-

2.4.x/drivers/char目录下,

修改/work/uClinux-dist/linux-2.4.x/drivers/char/Config.in文件,在“bool ‘LED Manager support’ CONFIG_LEDMAN”之前添加“bool ‘MV_GPIO support’ CONFIG_MVGPIO”,如下图:

 

修改/work/uClinux-dist/linux-2.4.x/drivers/char/Makefile,在“obj-$(CONFIG_SERIAL) += $(SERIAL)”之后添加“obj-$(CONFIG_MVGPIO) += mvgpio.o”,如下图:

 

修改/work/uClinux-dist/linux-2.4.x/drivers/char/mem.c文件,在开头添加(如下图):

 

在chr_dev_init()函数里面,“return 0”前面添加:

 

修改vendors/Marvell/Firefox/Makefile文件

 

 

在目录/work/uClinux-dist下,执行:sudo make xconfig,配置内核,如下图,选择“Character devices->MV_GPIO support”

 

 

配置完成后,分别执行下面两条命令:

 

下载到开发板,可以看到打印出来的信息,下图红框的内容,说明程序在系统启动的时候开始加载。

 

使用cat命令查看,可以看到是在字符设备第254号。

 

12.3 总结

这节课通过一个简单的字符设备驱动程序,让我们走进了驱动代码的大门,但这只是最初级的了解阶段,要想加深还是得多看多学才能做的更好。

posted on 2018-10-23 15:36  Liu_Farrell  阅读(660)  评论(0)    收藏  举报

导航