[linux device driver] Chapter 03:字符设备注册学习
来源:互联网 发布:unix如何安装ubuntu 编辑:程序博客网 时间:2024/05/06 02:20
从函数scullc_init中学习register_chrdev_region,进而进入到__register_chrdev_region,主要还是研究__register_chrdev_region这个函数。
这段代码的主要作用是从chrdevs[i]
__register_chrdev_region:
从上面可以看出,__register_chrdev_region完成的工作主要有三个步骤:
1. 分配出一个char_device_struct 结构,使用对应的入参赋值。
2.从chrdevs上找到对应的major号的chrdevs[major],然后从这个散列表中一级一级往下查找对应的minor号,最近将已经分配好的char_device_struct挂载到chrdevs全局变量中。
值得注意的是__register_chrdev_region的这个部分:
for (cp = &chrdevs[i]; *cp; cp = &(*cp)->next)if ((*cp)->major > major || ((*cp)->major == major && (*cp)->baseminor >= baseminor))break;if (*cp && (*cp)->major == major && (*cp)->baseminor < baseminor + minorct) {ret = -EBUSY;goto out;}cd->next = *cp;*cp = cd;
这段代码的主要作用是从chrdevs[i]
chrdevs是一个255个char_device_struct的数组指针:
static struct char_device_struct {struct char_device_struct *next;unsigned int major;unsigned int baseminor;int minorct;const char *name;struct file_operations *fops;struct cdev *cdev;/* will die */} *chrdevs[MAX_PROBE_HASH];它是一个散列表,取得i项chardevs后,函数不停的判断(*cp)->major是否大于或者是等于且baseminor也大于等于baseminor,这样最后在正常情况下会因为*cp=null而退出,从而cd->next = null,而*cp=cd,将cd挂载到*cd上,其实也就是chrdevs下的某一项。相对来说介绍详细的文章是这个:http://blog.csdn.net/yel617/article/details/5627505
0 0
- [linux device driver] Chapter 03:字符设备注册学习
- 《Linux device driver》字符设备和scull
- [linux device driver] Chapter 03:scullc_open理解
- Linux Device Driver学习笔记(1)—— 字符设备(1)
- Linux device drives chapter 3(字符设备)
- [linux device driver] Chapter 03:IS_ERR的理解
- [linux device driver] Chapter 03:make输出重定向
- [linux device driver] Chapter 03:scull_load脚本理解
- [linux device driver] Chapter 03:从scull_load了解awk
- [linux device driver] Chapter 03:从scull_load学习小括号,中括号,和大括号的区别
- linux设备驱动程序( linux device driver)
- linux字符设备注册
- linux设备模型bus,device,driver
- linux设备模型bus,device,driver
- LINUX设备模型BUS,DEVICE,DRIVER
- LINUX设备模型BUS,DEVICE,DRIVER
- linux设备模型bus,device,driver
- linux设备模型bus,device,driver
- MacBook Air上的bash升级
- EditPlus编译运行C程序的示例2--配置模板和学会使用自动完成
- 打造形形色色的进度条
- bzoj3226: [Sdoi2008]校门外的区间 线段树
- 修改linux终端命令行颜色
- [linux device driver] Chapter 03:字符设备注册学习
- 各类C语言排序算法汇总--选择排序
- lvs学习实践
- java编译时 编码gbk的不可映射字符
- 【BZOJ 1069】 [SCOI2007]最大土地面积
- poj解题报告——2029
- 【BZOJ 1067】 [SCOI2007]降雨量
- final修饰符
- spring学习之bean的生存范围和生命周期