转:1.1 cdev_init cdev_alloc 使用说明
- /fs/char_dev.c 2.6.35
- 550 void cdev_init(struct cdev *cdev, const struct file_operations *fops)
- 551 {
- 552 memset(cdev, 0, sizeof *cdev);
- 553 INIT_LIST_HEAD(&cdev->list); //初始化链表
- 554 kobject_init(&cdev->kobj, &ktype_cdev_default);//初始化 kobject 对象
- 555 cdev->ops = fops; //将传入的fops 传递给 cdev结构体
- 556 }
- /fs/char_dev.c 2.6.35
- 532 struct cdev *cdev_alloc(void)
- 533 {
- 534 struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL);
- 535 if (p) {
- 536 INIT_LIST_HEAD(&p->list); //操作与 cdev_init中的部分是一致的
- 537 kobject_init(&p->kobj, &ktype_cdev_dynamic);
- 538 }
- 539 return p;
- 540 }
- src/linux/drivrs/char/raw.c
- static struct cdev raw_cdev;//分配结构体类型
- static const struct file_operations raw_fops={
- .read = do_siync_read,
- .write = ...
- };
- static int __init raw_init(void)
- {
- ...
- cdev_init(&raw_cdev,&raw_fops);
- cdev_add();
- ...
- }
- src/drivers/char/snsc.c
- struct sysctl_data_s{
- struct cdev scd_cdev;
- nasid_t scd_nasid;
- };
- static const struct file_operations scdrev_fops={
- .read=scdrv_read,
- ...
- };
- static int __init scrdv_init(void)
- {
- ...
- struct sysctl_data_s *scd;//申请指针
- ...
- scd=kzalloc(sizeof(struct sysctl_data_s),GFP_KERKEL);
- ...
- cdev_init(&scd->scd_cdev,&scdrv_fops);
- cdev_add();
- }
转:1.1 cdev_init cdev_alloc 使用说明的更多相关文章
- 【整理】--【字符设备】cdev_init()/cdev_alloc(),cdev_add(),cdev_del()
(1) 内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { struct kobject ...
- cdev_alloc与cdev_init区别
struct cdev *cdev_alloc(void) { struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL); if (p) { ...
- cdev_init函数
linux-2.6.22/include/linux/cdev.hstruct cdev { struct kobject kobj; // 每个 cdev 都是一个 kobje ...
- 转:Linux 内核中的 cdev_alloc和cdev_add
内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj; ...
- linux内核cdev_init系列函数(字符设备的注册)
内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { struct kobject ...
- cdev_init和register_chrdev区别
--- 01:include/linux/fs.h static inline int register_chrdev(unsigned int major, const char *name, co ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
随机推荐
- winPcap_5_打开适配器并捕获数据包
知道如何获取适配器的信息了,那我们就开始一项更具意义的工作,打开适配器并捕获数据包.编写一个程序,将每一个通过适配器的数据包打印出来. 打开设备的函数是 pcap_open(). (Open a ge ...
- PCRE
http://blog.sina.com.cn/s/blog_6a1837e901010ckv.html http://hubeihuyanwei.blog.163.com/blog/static/2 ...
- linux有用网址
正则表达式在线测试 http://tool.oschina.net/regex
- CloudFoundry云环境中应用的特殊设计
常规的应用,大多数可以不经过任何修改即可部署于CloudFoundry云平台之上,但是在一些特殊情况下,总是不可避免地会出现一些细小的问题,如果在应用设计之初,就考虑到针对云平台的一些特殊情况,遵守云 ...
- Robotium--scroll操作系列
上下滚动 scrollDown public boolean scrollDown() Scrolls down the screen. Returns: true if more scrolling ...
- Android消息机制(2)
在Android 中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易.更好地架构系统,避免一些低级的错误. 下面我们分析下程序的运行过程: 1 ...
- Hibernate的fetch
hibernate抓取策略fetch具体解释一.hibernate抓取策略(单端代理的批量抓取fetch=select(默认)/join)測试用例:Student student = (Student ...
- ASP.NET-FineUI开发实践-6(二)
1.上回说到修改以前的会出现好几个5: 这是因为新增时是只新增到最后一行,所以点击选好了就跑到最后一行了,而且行号不会累积,只加到初始化的行号. 其实js里是有插入的,例子里可以插入到第一行,新增是a ...
- .net错误处理机制(转)
asp.net 提供了4中错误机制:Page_Error事件>ErrorPage属性>Application_Error事件> <customErrors>配置项 ① P ...
- 基于脚本的动画的计时控制(“requestAnimationFrame”)(转)
requestAnimationFrame 方法的支持,该方法通过在系统准备好绘制动画帧时调用该帧,从而为创建动画网页提供了一种更平滑更高效的方法.在此 API 之前,使用 setTimeout 和 ...