转: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版 团队名称 北京航空航天大学计算机学院 拒 ...
随机推荐
- HDU2056(rectangles)
Rectangles Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Android控件Editext、TextView属性详解
EditText属性描述 android:layout_gravity="center_vertical"//设置控件显示的位置:默认top,这里居中显示,还有bottom and ...
- nagios 实现Mysql 主从同步状态的监控
一.系统环境 主机名 IP nagios 192.168.15.111 mysql_s 192.168.15.21 二.操作步骤 2.1 mysql_s端的配置 2.1.1 编写check_mysql ...
- Robotium -- AndroidUI优化工具HierarchyViewer
为什么使用HierarchyViewer 不合理的布局会使我们的应用程序UI性能变慢,HierarchyViewer能够可视化的角度直观地获得UI布局设计结构和各种属性的信息,帮助我们优化布局设计.H ...
- 子查询in和表连接效率
在数据查询时,尽量减少in子查询而使用表连接的方式进行,效率更高.
- Java基础知识强化27:Object类之toString()方法
1. Object类的toString()方法: public String toString():返回该对象的字符串表示 2. 案例演示: (1)Student类: package cn.itc ...
- ios 中如何应对UIScrollView快速滑动(暴力用户,暴力测试)
1.实现UIScrollViewDelegate 开始滑动: - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 滑动 ...
- Flask挺好
很久没写东西了,寒假比较低效,几乎没写代码.只在慕课网上刷完了linux系列课程,现在用linux熟了很多以及看了大部分<鸟叔-linux服务器架设>那本书,虽然对于写代码并没有什么卵用, ...
- maven第7章生命周期和插件
maven插件用到哪些思想? 7.7 从命令行调用插件 目标前缀和插件前缀是一个意思. 在本地搭建maven环境,熟悉maven的环境.
- (转)DevExpress GridView属性设置
GirdControl是数据的容器,它包含多种显示方式,GridView则是一种二维表格视图. 绑定数据源: List<Student> list = new List<Studen ...