register_chrdev() register_chrdev_region() alloc_chrdev_region的区别?

分类: Linux设备驱动 881人阅读 评论(0) 收藏 举报
在fs.h中的申明如下:
分配设备号:
extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
extern int register_chrdev_region(dev_t, unsigned, const char *);
注册设备:
extern int register_chrdev(unsigned int, const char *,
               struct file_operations *);
注销设备:
extern int unregister_chrdev(unsigned int, const char *);
注销设备号:
extern void unregister_chrdev_region(dev_t, unsigned);
说明:
**********************************
extern int register_chrdev(unsigned int, const char *,
               struct file_operations *);
作用:注册一个字符串设备
unsigned int 是主设备号;
const char*是设备名;
struct file_operations*是文件结构体。
********************************
extern int register_chrdev_region(dev_t first, unsigned int count, char* name)
要想注册一个设备则需要一个主设备号,那么就需要给设备分配一个主设备号。
这个函数的作用:就是给一个设备分配设备编号的。
first是要分配设备编号范围的起始值。
count是所请求连续设备编号的个数。不能太大。
name是设备名,(要与该设备编号范围关联)
如果分配成功,则返回0,
如果分配失败,则返回负的错误码。这时候所请求的编号区域不能用。
注:申请是只是一个设备编号区域。
**********************************
extern int alloc_chrdev_region(dev_ *dev, unsigned int firstminor, unsinged int count, char *name)
说明:
1.如果我们提前知道设备的编号,那么就用register_chrdev_region(),这个可以工作的很好。
2.但是如果我们不知道呢,linux一直想解决这个问题,这就有了上面的函数。
这个函数是动态申请设备编号,这是linux的一个进步,一直想可以动态申请设备编号。
有了它,我们就不要考虑设备编号的问题了,因为使用它后,内核可以运行上面的函数给我们动态地分配我们需要的主设备号。
-------不知道设备编号的问题就自动解决了。
*dev是一个输出参数,当设备成功完成调用后,它将保存已分配范围的第一个编号。
firstminor是要请求的第一个次设备号。一般为0。
count同样是所请求连续设备编号的次数。
*name同样是相应和设备名。
************************************
说明:因为我们在led_driver中已经知道了设备编号,所以只要注册就可以了。不需要分配编号。
*********************************
注销同上,不说了。
**********************************
回头再说说设备编号的问题:
我们可以分配设备编号,最后用动态分配,不易冲突。
那么我们给一个设备分配的主设备号具体是多少呢?在一个范围总有一个确定的值吧。
其实:
一旦给一个设备分配好了设备号后,我们就可以在/proc/devices中读取了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值