register_chrdev_region()和registe_chrdev()
来源:互联网 发布:淘宝店铺收藏怎么做 编辑:程序博客网 时间:2024/06/12 02:23
register_chrdev_region()和registe_chrdev()
分配设备编号,注册设备与注销设备的函数均在fs.h中申明,如下:
extern int register_chrdev_region(dev_t, unsigned, const char *); //静态的申请和注册设备号
extern int alloc_chrdev_region(dev_t, unsigned, const char *);//动态的申请注册一个设备号
extern int register_chrdev(unsigned int, const char *,
struct file_operations *);//int为0时候动态注册,非零时候静态注册。
extern int unregister_chrdev(unsigned int, const char *); extern void unregister_chrdev_region(dev_t, unsigned);
在Linux2.6版本里面,register_chrdev_region()是register_chrdev()的升级版本。
使用register_chrdev_region()首先需要定义一个dev_t变量来作为一个设备号, dev_t dev_num;
如果想静态申请,那么dev_num=MKDEV(major_no,0);major是一个表示设备号的变量
然后便可以用register_chrdev_region(dev_num,2,"my_dev");第二个参数表示注册的此设备数目,第三个表示驱动名 如果要动态的注册主设备号,使用下面
mem_major = MAJOR(devno); //取出主设备号保存在mem_major中 前面只是注册了设备号,后面要向内核添加设备了。 ///////cdev included in <linux/cdev.h>
struct cdev devno;
cdev_init(&devno,&file_ops); //初始化改设备
devno.owner = THIS_MODULE; //.owner这表示谁拥有你这个驱动程序, devno.ops = &mem_fops;
对于已经知道了主设备号,就用cdev_add(&devno, dev_num,MEMDEV_NR_DEVS);来添加设备 如果是动态申请的设备号,就用
cdev_add(&devno, MKDEV(mem_major, 0), MEMDEV_NR_DEVS); //向内核添加设备,第一个参数是设备,第二个参数是设备号,第三个参数是要注册的次设备数目,mem_major在动态申请时候保存起来了。
注销设备时候,使用unregister_chrdev_region(dev_t, unsigned);第一个参数设备号,和注册时候的要一致,因此如果是动态分配的就需要保存起来,第二个参数是次设备的个数。
而使用 register_chrdev(unsigned int, const char *,struct file_operations *);
来申请设备号时候,如果第一个参数是0,表示动态的分配给此驱动程序一个主设备号,,非零时候,表示备驱动程序向系统申请主设备号,第二个是设备名,第三个file_operations,如果是动态分配的,则函数返回分配的主设备号。 对应的使用unregister_chrdev(unsigned int, const char *);来注销设备,第一个参数是主设备号,必须和注册时候的主设备号一致,如果注册时候是动态的分配的主设备号,就需要保存起来。第二个是设备名,
由此可见,使用register_chrdev_region()比register_chrdev()多了一步,就是想内核注册添加cdev设备的步骤
另外在2.6内核中
使用module_init()和module_exit()来作为模块的入口和出口,而老版本中使用init_module()和cleanup_module()来作为入口和出口
分配设备编号,注册设备与注销设备的函数均在fs.h中申明,如下:
extern int register_chrdev_region(dev_t, unsigned, const char *); //静态的申请和注册设备号
extern int alloc_chrdev_region(dev_t, unsigned, const char *);//动态的申请注册一个设备号
extern int register_chrdev(unsigned int, const char *,
struct file_operations *);//int为0时候动态注册,非零时候静态注册。
extern int unregister_chrdev(unsigned int, const char *); extern void unregister_chrdev_region(dev_t, unsigned);
在Linux2.6版本里面,register_chrdev_region()是register_chrdev()的升级版本。
使用register_chrdev_region()首先需要定义一个dev_t变量来作为一个设备号, dev_t dev_num;
如果想静态申请,那么dev_num=MKDEV(major_no,0);major是一个表示设备号的变量
然后便可以用register_chrdev_region(dev_num,2,"my_dev");第二个参数表示注册的此设备数目,第三个表示驱动名 如果要动态的注册主设备号,使用下面
mem_major = MAJOR(devno); //取出主设备号保存在mem_major中 前面只是注册了设备号,后面要向内核添加设备了。 ///////cdev included in <linux/cdev.h>
struct cdev devno;
cdev_init(&devno,&file_ops); //初始化改设备
devno.owner = THIS_MODULE; //.owner这表示谁拥有你这个驱动程序, devno.ops = &mem_fops;
对于已经知道了主设备号,就用cdev_add(&devno, dev_num,MEMDEV_NR_DEVS);来添加设备 如果是动态申请的设备号,就用
cdev_add(&devno, MKDEV(mem_major, 0), MEMDEV_NR_DEVS); //向内核添加设备,第一个参数是设备,第二个参数是设备号,第三个参数是要注册的次设备数目,mem_major在动态申请时候保存起来了。
注销设备时候,使用unregister_chrdev_region(dev_t, unsigned);第一个参数设备号,和注册时候的要一致,因此如果是动态分配的就需要保存起来,第二个参数是次设备的个数。
而使用 register_chrdev(unsigned int, const char *,struct file_operations *);
来申请设备号时候,如果第一个参数是0,表示动态的分配给此驱动程序一个主设备号,,非零时候,表示备驱动程序向系统申请主设备号,第二个是设备名,第三个file_operations,如果是动态分配的,则函数返回分配的主设备号。 对应的使用unregister_chrdev(unsigned int, const char *);来注销设备,第一个参数是主设备号,必须和注册时候的主设备号一致,如果注册时候是动态的分配的主设备号,就需要保存起来。第二个是设备名,
由此可见,使用register_chrdev_region()比register_chrdev()多了一步,就是想内核注册添加cdev设备的步骤
另外在2.6内核中
使用module_init()和module_exit()来作为模块的入口和出口,而老版本中使用init_module()和cleanup_module()来作为入口和出口
0 0
- register_chrdev_region()和registe_chrdev()
- register_chrdev_region()和registe_chrdev()
- register_chrdev_region()和registe_chrdev()
- register_chrdev_region()和registe_chrdev()
- register_chrdev_region和alloc_chrdev_region
- register_chrdev_region和alloc_chrdev_region
- register_chrdev和register_chrdev_region
- register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- register_chrdev_region
- register_chrdev_region
- register_chrdev_region
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()。
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()。
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- Activity Intent FLAG 详解
- Hadoop的HDFS文件存储实现机制
- hadoop中的Configuration对象是什么有什么用?
- OC笔记 - UI基础控件(2015.2.3)
- QC,CZ合体记
- register_chrdev_region()和registe_chrdev()
- 中断和异常
- 网络编程小知识——设置TIME_WAIT参数
- 15 第十五天【健身】
- Sql 映射文件
- 骰子涂色(Cube painting)
- protobuf一些注意事项
- 实况球员综合能力大比拼
- <cocos2dx 随记> 关于cocos2dx接Android sdk的一些坑