Linux驱动程序学习笔记(5)——新版本的初始化

来源:互联网 发布:13网络用语 编辑:程序博客网 时间:2024/06/18 15:38

一,分配设备号

1,静态分配设备号
int register_chrdev_region(dev_t first, unsigned int count, char *name);
        first 是你要分配的起始设备编号(包含主和次设备号). first 的次编号部分常常是 0, 但是没有要求是那个效果. 
        count 是你请求的连续设备编号的总数. 注意, 如果 count 太大, 你要求的范围可能溢出到下一个次编号; 但是只要你要求的编号范围可用, 一切都仍然会正确工作. 
        name 是应当连接到这个编号范围的设备的名子; 它会出现在 /proc/devices 和 sysfs 中.

2,动态分配设备号
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name);
        dev 是一个只输出的参数, 它在函数成功完成时持有你的分配范围的第一个数. 
        fisetminor 应当是请求的第一个要用的次编号; 它常常是 0. 
        count 和 name 参数如同给 request_chrdev_region 的一样.

3,释放已分配的设备号
void unregister_chrdev_region(dev_t first, unsigned int count); 

二,分配cdev

1,cdev初始化

一个 cdev一般它有两种定义初始化方式:静态的和动态的。


(1)静态内存定义初始化:
struct cdev my_cdev;
cdev_init(&my_cdev, &fops);
my_cdev.owner = THIS_MODULE;

(2)动态内存定义初始化:
struct cdev *my_cdev = cdev_alloc();
my_cdev->ops = &fops;
my_cdev->owner = THIS_MODULE;


2,添加cdev到系统中

初始化cdev后,需要把它添加到系统中去。为此可以调用 cdev_add()函数。传入 cdev结构的指针,起始设备编号,以及设备编号范围。


int fsfunc   cdev_add ( struct cdev * p, dev_t dev, unsigned count); 
        p, the cdev structure for the device 
        dev, the first device number for which this device is responsible 
        count, the number of consecutive minor numbers corresponding to this device 


3,删除cdev
当一个字符设备驱动不再需要的时候(比如模块卸载),就可以用 cdev_del()函数来释放 cdev占用的内存。

void fsfunc cdev_del ( struct cdev * p); 
        p,  the cdev structure to be removed 
原创粉丝点击