嵌入式Linux驱动开发案例流程--LED驱动

时间:2022-07-07 18:57:02

本文主要是以一个最简单的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);