日期:2014-05-16 浏览次数:20630 次
一个名为”memory”的完整的驱动:驱动的初始化部分
现在我将要演示如何建立一个完整的设备驱动:memory.c。这个驱动允许从它读取一个字符或者向它写入一个字符。尽管在正常情况下并不是很有用,但是这个设备却提供了一个很有阐述性的例子,因为它是一个完整的设备驱动;它也很好实现,因为它并不是一个真正的硬件借口,因为它不和真正的硬件交互(除了计算机自己)
为了开发这个驱动,几个新的在设备驱动程序中频繁出现的#include语句需要添加进来:
<memory initial>=
/* Necessaryincludes for device drivers */
#include<linux/init.h>
#include<linux/config.h>
#include<linux/module.h>
#include<linux/kernel.h> /* printk() */
#include<linux/slab.h> /* kmalloc() */
#include<linux/fs.h> /* everything... */
#include<linux/errno.h> /* error codes */
#include<linux/types.h> /* size_t */
#include<linux/proc_fs.h>
#include<linux/fcntl.h> /* O_ACCMODE */
#include<asm/system.h> /* cli(), *_flags */
#include<asm/uaccess.h> /* copy_from/to_user */
MODULE_LICENSE("DualBSD/GPL");
/* Declarationof memory.c functions */
intmemory_open(struct inode *inode, struct file *filp);
intmemory_release(struct inode *inode, struct file *filp);
ssize_tmemory_read(struct file *filp, char *buf, size_t count, loff_t *f_pos);
ssize_tmemory_write(struct file *filp, char *buf, size_t count, loff_t *f_pos);
voidmemory_exit(void);
intmemory_init(void);
/* Structurethat declares the usual file */
/* accessfunctions */
structfile_operations memory_fops = {
read:memory_read,
write:memory_write,
open:memory_open,
release:memory_release
};
/* Declarationof the init and exit functions */
module_init(memory_init);
module_exit(memory_exit);
/* Globalvariables of the driver */
/* Major number*/
intmemory_major = 60;
/* Buffer to