转: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版 团队名称 北京航空航天大学计算机学院 拒 ...
随机推荐
- [Java] List / ArrayList - 源代码学习笔记
在阅读 List / ArrayList 源代码过程中,做了下面的笔记. LinkedList 的笔记较多,放到了另一篇博文 LinkedList / Queue- 源代码学习笔记 List List ...
- MySQL定时事件
1.创建一个测试表 CREATE TABLE aaa (timeline TIMESTAMP); 2.创建一个事件:每秒插入一条记录到数据表 CREATE EVENT e_test_insert SE ...
- (转)Maven实战(三)Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...
- C primer plus 读书笔记第九章
本章的标题是函数.C的设计原则是把函数作为程序的构成模块. 1.函数概述 函数的定义:函数是用于完成特定任务的程序代码的自包含单元. 使用函数的原因:1.函数的使用可以省去重复代码的编写.2.使得程序 ...
- mysql 变量is null 和 not exists区别
问题: 使用游标遍历时,发现使用 select var into tmp where var=? 然后判断if tmp is null时,不能走完所有的遍历.经debug发现, 当var为空时,则跳出 ...
- [转] Linux Shell 文本处理工具集锦
内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...
- js类封装
将js方法封装成类,好处就是团队开发中避免命名冲突,部分类整理代码如下: function LocalStorageHelper() { //检测浏览器是否支持localStorage this.ch ...
- nginx 配置轮询服务
通常我们应用nginx做代理时,用到它的轮训服务 #设置轮询名称 upstream zyy{ server 127.0.0.1:8080 #本机的apache服务 } server { listen ...
- 【转】解决警告 warning: directory not found for option
转:http://blog.sina.com.cn/s/blog_6f72ff900101es6x.html 解决方法: 选择项目名称----->Targets----->Build Se ...
- HTML基础总结<标题>
HTML: 标题 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. <h1> 定义最大的标题.<h6> 定义最小的标题. & ...