本文主要是以一个最简单的LED驱动开发流程,来窥探一下Linux驱动开发为何物。
基本流程:
1.编写驱动文件xxxx.c
这个文件的主要作用是对设备硬件初始化,主要是xxx_init(),其中也包括设备的注册。
对file_operations结构体进行初始化,这个初始化是核心,其实是对open.write.read等函数找映射函数。
各种映射函数的编写,例如xxx_open(),xxxx_write(),xxx_read()等。
2.驱动文件编写完成后,将该文件放入到"内核"中,路径为linux-2.6.xxx/driver/char(根据设备类型不同,选择字符型或块型)。本例中显然是字符型设备。
3.在/drivers/char/Makefile中增加一行:
obj-m += xxxx.o (xxxx就是流程1中的驱动文件名)
4.在内核目录下执行“make modules”命令,就可以在/drivers/char 下生成xxx.ko
5.将xxx.ko下载到开发板设备的/lib/modules/2.6.xxx 目录下。
6.执行“modprobe xxx”,就可以将该驱动模块装载到开发板的Linux内核中。如果想要卸载该驱动模块,可以执行命令“rmmod xxx”即可。
7.使用命令mknod在开发板中创建设备文件,这一点尤为重要,这个相当于为驱动文件创建了一个“句柄”或者“路径”,这样应用程序想要使用该驱动时,需要用open打开对应的设备,open中的路径就是该“句柄”。
命令:mknod Name {b | c} Major Minor ,其中Name为设备名称,b或c为设备类型,Major为主设备号,Minor为次设备号。例如:mknod /dev/leds c 231 0
8.至此,驱动已经开发完成,如果想要使用驱动,则需要开发应用程序,比如test.c,在test中主要是要打开对应的设备,然后使用对应的设备。
命令:open(constchar*pathname,intflags);
从名称就可以看出pathname为设备路径,intflags为打开类型。接着流程7,进行举例为:open("/dev/leds",0);