- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
cdev 结构体与字符设备的注册
cdev 结构体与字符设备的注册
在 linux 2.6内核中,使用 cdev结构体描述字符设备,cdev 的定义在 linux/cdev.h 中可找到,其定义如下:引用 struct cdev {??????? struct kobject kobj;??????? struct module *owner;??????? const struct file_operations *ops;??????? struct list_head list;??????? dev_t dev;??????? unsigned int count;};
cdev 结构体中的 dev_t 成员定义了设备号,为 32 位,其中高 12 位为主设备号,低 20 位为次设备号。其中,struct kobject 是内嵌的 kobject 对象;??????????? struct module 是所属模块;??????????? struct file_operations 为文件操作结构体。
使用以下宏可以从 dev_t 获得主设备号和次设备号:引用 ??????? MAJOR (dev_t dev);??????? MINOR (dev_t dev);
而使用下面宏可以通过主设备号和次设备号生成 dev_t? :引用 MKDEV (int major, int minor);
?
有两个方法可以分配并初始化 cedv 结构。如果希望在运行时动态的获得一个独立的 cdev 结构,可以如下这么做:引用 struct cdev *my_cdev = cdev_alloc();my_cdev-ops = my_fops;
cdev_alloc(void) 函数的代码为(对 cdev 结构体操作的系列函数可在 fs/char_dev.c 中找到):引用 struct cdev *cdev_alloc(void){??????? struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL);??????? if (p) {??????????????? INIT_LIST_HEAD(p-list);??????????????? kobject_init(p-kobj, ktype_cdev_dynamic);??????? }??????? return p;}
cdev_alloc() 的源代码可能由于内核版本号的不同而有差别(上面的代码为 2.6.30)
有时可能希望就把 cdev 结构内嵌在自己的特定设备结构里,那么在分配好 cdev 结构后,就用 cdev_init() 函数对其初始化:引用 void cdev_init (struct cdev *cdev, struct file_operations *fops)
cdev_init() 函数代码为:引用 void cdev_init(struct cdev *cdev, const struct file_operations *fops){??????? memset(cdev, 0, sizeof *cdev);??????? INIT_LIST_HEAD(cdev-list);??????? kobject_init(cdev-kobj, ktype_cdev_default);??????? cdev-ops = fops;}
另外,像 cdev 中的 owner 要设置为 THIS_MOULE 。一旦 cdev 结构体设置完毕,最后一步就是要把这事告诉给内核,使用下面的函数:引用 int cdev_add(struct cdev *p, dev_t dev, unsigned count)
cdev_add() 对应的代码为:引用 /*** cdev_add() - add a char device to the system* @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** cdev_add() adds the device represented by @p to the system, making it* live immediately.? A
您可能关注的文档
- 2014年专升本写作最后预测10篇.doc
- 中英文对照加快捷键.docx
- 论证素材之二——名言.docx
- EFI BIOS之Handler&Protocol.doc
- 深度理解依赖注入.doc
- 农村打工仔变身餐饮大老板_草根说事1688.fm.docx
- EDMA使用文档原创.doc
- STM32 例程看门狗.doc
- 2013年12月英语四级作文预测范文.doc
- 2013英语新四级预测作文汇总.docx
- 《GB/Z 44363-2024致热性 医疗器械热原试验的原理和方法》.pdf
- GB/T 16716.6-2024包装与环境 第6部分:有机循环.pdf
- 中国国家标准 GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统.pdf
- 《GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统》.pdf
- GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统.pdf
- 中国国家标准 GB/T 44315-2024科技馆展品设计通用要求.pdf
- GB/T 44305.2-2024塑料 增塑聚氯乙烯(PVC-P)模塑和挤塑材料 第2部分:试样制备和性能测定.pdf
- 《GB/T 44315-2024科技馆展品设计通用要求》.pdf
- GB/T 44315-2024科技馆展品设计通用要求.pdf
- GB/T 39560.9-2024电子电气产品中某些物质的测定 第9 部分:气相色谱-质谱法(GC-MS)测定聚合物中的六溴环十二烷.pdf
文档评论(0)