1、#include
dev_t:dev_t 是内核中用来表示设备编号的数据类型。
int MAJOR(dev_t dev);
int MINOR(dev_t dev);
这两个宏从设备编号中抽取出主/次设备号。
类型size_t也在头文件linux/types.h中定义。
2、 #include
“文件系统”头文件,它是编写设备驱动程序必需的头文件,其中声明了许多重要的函数和数据结构。
int register_chrdev_region(dev_t first, unigned in count, char *name)
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name)
void unregister_chrdev_region(dev_t first, unsigned int count);
提供给驱动程序用来分配和释放设备编号范围的函数。在期望的主设备号预先知道的情况下,应调用register_chrdev_region;而对动态分配,使用alloc_chrdev_region。
int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);
老的(2.6之前的)字符设备注册例程。2.6内核也提供了仿效该例程的函数,但是新代码不应该再使用该函数。如果主设备号不是0,则不加修改地使用;否则,系统将为该设备动态地分配编号。
int unregister_chrdev(unsigned int major, const char *name);
用于注销由register_chrdev函数注册的驱动程序。major和name字符串必须包含与注册该驱动程序时使用的相同的值。
struct file_operations;
struct file;
struct inode;
大多数设备驱动程序都会用到的三个重要数据结构。file_operations结构保存了字符驱动程序的方法;struct file表示一个打开的文件,而struct inode表示一个磁盘上的文件。
3、 #include
struct cdev *cdev_alloc(void);
void cdev_init(struct cdev *dev, struct file_operations *fops);
int cdev_add(struct cdev *dev, dev_t num, unsigned int count);
void cdev_del(struct cdev *dev);
用来管理cdev结构的函数,内核中使用该结构表示字符设备。
4、 #include
container_of(pointer, type,field);
3.5 #include
该头文件声明了在内核代码和用户空间之间移动数据的函数。
unsigned long copy_from_user(void *to, const void *from, unsigned long count);
unsigned long copy_to_user(void *to, const void *from, unsigned long count);
在用户空间和内核空间之间拷贝数据。
转载自:http://hi.baidu.com/vera4610/blog/item/c0b0e854b85e535cd10906cd.html