Chinaunix首页 | 论坛 | 博客
  • 博客访问: 714426
  • 博文数量: 161
  • 博客积分: 2998
  • 博客等级: 少校
  • 技术积分: 1697
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-28 09:39
文章分类

全部博文(161)

文章存档

2012年(6)

2011年(120)

2010年(35)

分类: LINUX

2011-04-11 21:29:26

在调用 cdev_add()函数向系统注册字符设备之前,应首先调用 register_chrdev_region()或 alloc_chrdev_region() 函数向系统申请设备号,这两个函数在 中可以找到,其原型是:
引用

int register_chrdev_region(dev_t first, unsigned int count, const char *name);
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, const char *name);


register_chrdev_region() 函数用于已知起始设备的设备号的情况。
参数 first 表示起始设备号;
参数 count 表示从起始设备号开始连续的设备号数目,需要注意的是 count 不能过大,不然有可能溢出到下一个主设备号上;

不是被使用只是一个要请求的范围,最终只能分配给你一个号码。分配的号码你可以利用 cat /proc/devices 看到。

参数 name 表示设备的名称,这个名称也会在 /proc/devices 文件以及sfsfs 中看到。

register_chrdev_region() 成功时返回 0 ,失败时返回负数。

......... ............... .............. ..................... .............. .............. ...........

alloc_chrdev_region() 用于设备号未知,向系统动态申请未被占用的设备号情况。

参数 dev ,在系统调用成功后,会把得到的设备号方到这个参数中;
参数 firstminor 是请求的第一个次设备号,一般为 0 ;
参数 count  表示一个范围值;
参数 name 表示设备名。

alloc_chrdev_region() 和 register_chrdev_region() 对比的优点在于它会自动避开设备号重复的冲突。
阅读(1688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~