引言
Linux 设备驱动简介:它在 Linux 系统中扮演着重要角色,是很多独立的“黑盒子”的总称,使某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏设备的工作细节。用户操作通过一组标准化的调用执行,而这些调用是和特定的驱动程序无关的。将这些调用映射到作用于实际硬件设备特有的操作上是设备驱动程序的任务。这个编程接口能够使得驱动程序独立于内核的其它部分而建立,在必要的情况下,可在运行时“插入”内核。这种模块化的特点,使得 Linux 设备驱动程序的编写非常简单,因此内核驱动程序的数目也增长迅速。
Linux 设备驱动简介:它在 Linux 系统中扮演着重要角色,是很多独立的“黑盒子”的总称,使某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏设备的工作细节。用户操作通过一组标准化的调用执行,而这些调用是和特定的驱动程序无关的。将这些调用映射到作用于实际硬件设备特有的操作上是设备驱动程序的任务。这个编程接口能够使得驱动程序独立于内核的其它部分而建立,在必要的情况下,可在运行时“插入”内核。这种模块化的特点,使得 Linux 设备驱动程序的编写非常简单,因此内核驱动程序的数目也增长迅速。
实例
Linux 设备驱动程序可以认为是一个学名,我们通常称之为“模块”,也就是位于 Linux OS 的 /lib/modules/`uname -r`/kernel 目录下以 *.ko 为后缀的文件。
在此,先为大家呈现一个简单的设备驱动程序:simple-lkm.ko
清单一、simple-lkm.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int my_module_init( void )
{
printk(KERN_INFO "my_module_init called. Module is now loaded.\n");
return 0;
}
static void my_module_cleanup( void )
{
printk(KERN_INFO "my_module_cleanup called. Module is now unloaded.\n");
return;
}
mod