【整理】--【字符设备】分配设备号register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
2015-07-20 22:53
316 查看
(1)
分配设备编号,注册设备与注销设备的函数均在fs.h中声明,如下:
extern int register_chrdev_region(dev_t,unsigned int,const char*);表示静态的申请和注册设备号
extern int alloc_chrdev_region(dev_t,unsigned int,const char*);表示动态的申请和注册设备号
extern int register_chrdev(unsigned int,const char*,struct file_operations*);表示int为0时动态注册,非零静态注册。
在linux2.6版本里面,register_chrdev_region是register_chrdev的升级版。
(2)
使用register_chrdev_region函数时,首先要定义一个dev_t变量来作为一个设备号:
dev_t dev_num;
如果想静态申请,那么
dev_num=MKDEV(major_no,0); //major_no表示设备号的变量,然后便可以使用 //比如 major_no 为 248
register_chrdev_region(dev_num,2,"my_dev"); //第二个参数表示注册的设备数量,第三个表示驱动名
如果要动态的注册设备号,使用下面:
alloc_chrdev_region(&dev_num,0,2,"memdev"); // 次设备号从0开始,注册两个设备,设备名为memdev。
(3)
前面只是注册了设备号,后面要向内核添加设备了;
struct cdev devno;
cdev_init(&devno,&file_operations) // 初始化设备
devno.owner=THIS_MODULE;
devno.ops=&mem_fops
对于已经知道了主设备号,就用
cdev_add(&devno,dev_num,MEMDEV_NR_DEVS);来添加设备
如果是动态申请的设备号,就用
cdev_add(&devno,MKDEV(mem_major,0),MEMDEV_NR_DEVS);
由此可见,使用register_chrdev_region()比register_chrdev()多了一步,就是想内核注册添加cdev设备的步骤。
分配设备编号,注册设备与注销设备的函数均在fs.h中声明,如下:
extern int register_chrdev_region(dev_t,unsigned int,const char*);表示静态的申请和注册设备号
extern int alloc_chrdev_region(dev_t,unsigned int,const char*);表示动态的申请和注册设备号
extern int register_chrdev(unsigned int,const char*,struct file_operations*);表示int为0时动态注册,非零静态注册。
在linux2.6版本里面,register_chrdev_region是register_chrdev的升级版。
(2)
使用register_chrdev_region函数时,首先要定义一个dev_t变量来作为一个设备号:
dev_t dev_num;
如果想静态申请,那么
dev_num=MKDEV(major_no,0); //major_no表示设备号的变量,然后便可以使用 //比如 major_no 为 248
register_chrdev_region(dev_num,2,"my_dev"); //第二个参数表示注册的设备数量,第三个表示驱动名
如果要动态的注册设备号,使用下面:
alloc_chrdev_region(&dev_num,0,2,"memdev"); // 次设备号从0开始,注册两个设备,设备名为memdev。
(3)
前面只是注册了设备号,后面要向内核添加设备了;
struct cdev devno;
cdev_init(&devno,&file_operations) // 初始化设备
devno.owner=THIS_MODULE;
devno.ops=&mem_fops
对于已经知道了主设备号,就用
cdev_add(&devno,dev_num,MEMDEV_NR_DEVS);来添加设备
如果是动态申请的设备号,就用
cdev_add(&devno,MKDEV(mem_major,0),MEMDEV_NR_DEVS);
由此可见,使用register_chrdev_region()比register_chrdev()多了一步,就是想内核注册添加cdev设备的步骤。
相关文章推荐
- 启动erlang/OTP里面的Web服务器(application INETS启动过程代码分析)
- ORA-4031错误 解决方法
- Linux脚本备忘
- 一个简单RPC框架是如何炼成的(VI)——引入服务注册机制
- javaEE第三~四天
- 状态模式
- Freemarker学习中遇到的问题
- 张珺 2015/07/15 个人文档
- Maximum Subarray
- Foundation框架常见结构体(个别)
- SQL SERVER ALIAS
- leetcode[94]:Binary Tree Inorder Traversal
- python测试框架nose研究
- lintcode-末尾的零
- 黑马程序员------C语言程序 数组
- Apache BeanUtils 拷贝属性的实现
- 在Unity中使用射线
- mysql 忘记了root的密码(linux下解决方法,window同理)
- BC400-Unit1:Flow of an ABAP Program
- Java中编码占几个字符