chrdev字符设备几种注册方式的差异
数据结构
#define CHRDEV_MAJOR_HASH_SIZE 255static struct char_device_struct {struct char_device_struct *next;unsigned int major;unsigned int baseminor;int minorct;char name[64];struct file_operations *fops;struct cdev *cdev; /* will die */
} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];/* index in the above */
static inline int major_to_index(int major)
{return major % CHRDEV_MAJOR_HASH_SIZE;
}
全局变量chrdevs,是一个保存所有字符设备的数组,按主转换出的索引值从小到大排列;
每个元素为一个char_device_struct 链表,链表元素按次设备号从小到大排列。
主设备号与索引的关系为:major % CHRDEV_MAJOR_HASH_SIZE, 即:major = 1 与major = 256在使用相同的索引值,index=1;
设备申请方式的差异
----------------------------------------------- 支持多设备 -----------------------------------------------int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)dev = 0 时,为动态申请设备,申请到的设备号保存到dev;baseminor,次设备号起始编号;count,申请连续设备号的数量;name,设备名称;----------------------------------------------- 只支持静态申请 -----------------------------------------------int register_chrdev_region(dev_t from, unsigned count, const char *name)from,申请的设备号起始编号;count,申请连续设备号的数量;name,设备名称;
----------------------------------------------- 单设备 -----------------------------------------------int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops)major = 0 时,为动态申请设备,申请到的主设备号保存到major;name,设备名称;fops,关联设备的文件操作符;
注:对于申请连续的设备号,使用倒序申请。最终返回起始设备号。
功能差异
完整注册过程
register_chrdev = { alloc_chrdev_region + cdev_init + cdev_add }
转载于:https://www.cnblogs.com/gaoyang3513/p/10968765.html
chrdev字符设备几种注册方式的差异相关推荐
- 字符设备编号的注册分配
内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里.该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char ...
- 第12课第3节 字符设备驱动程序之查询方式的按键驱动程序
第12课第3节 字符设备驱动程序之查询方式的按键驱动程序 cat /proc/devices //查询主设备号 insmod ./second_drv.ko ls /dev/button -l pos ...
- JS标签的获取、js curd、事件的四要素、事件的三种注册方式和区别
1.掌握html和body标签的两种特殊获取方式(*****)---(重点) html: document.documentElement body: document.body le ...
- linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...
之前我们完成了关于通过查询的方式获取按键键值的驱动程序,可以参考:嵌入式Linux开发--裸板程序之中断控制器. 虽然读取键值没有什么问题,但是测试程序占用CPU过高,一直在不断的查询,资源消耗过大, ...
- 【我的C语言学习进阶之旅】介绍一下NDK开发中关于JNI函数的两种注册方式:静态注册和动态注册
目录 一.要介绍本篇博客的原因 二.静态注册 2.1 实现原理 2.2 实现过程 2.3 弊端 2.4 示例 三.动态注册 3.1 实现原理 3.2 实现过程 3.3 优点 3.4 示例 一.要介绍本 ...
- spring初识--bean的几种注册方式
spring彻底改变了java世界观.spring解决了java 对象管理问题,今天我们来看看spring创建对象的方式有哪些至今还不知道的吧 注册bean的几种方式(IOC) BeanDefinit ...
- Android面试,BroadCastReceiver的两种注册方式的异同
在Android手机应用程序中开发中,需要用到BroadcastReceiver来监听广播的消息.在自定义好BroadcastReceiver ,需要对其进行注册,注册有两种方法: 一种是在代码当中注 ...
- SSL请求trustStore的两种注册方式
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 如果是要 ...
- 字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)
1.中断方式获取按键值单片机: 1)按键按下 2)cup发生中断,跳转到异常向量入口执行 3)b 函数a.保存被中断的现场b.执行中断处理函数c.恢复 linux: 1)trap_init()函数构造 ...
最新文章
- 百度ACE智能交通能提升最高30%城市通行效率,刚刚拿下世界互联网大会最高荣誉...
- 【小白学习PyTorch教程】十六、在多标签分类任务上 微调BERT模型
- 有关提高visual studio开发效率的方法
- CodeForces 1110H. Modest Substrings
- 盘点2010年十大出版事件 文著协“宣战”百度文库
- 启动一个Java进程
- 看printk引发的一点思考
- python玩转android_如何用python玩跳一跳 ?(安卓版)
- Pycharm的git密码填错了的修改方法
- usb audio知识点
- 计算机遥感毕设选题,遥感硕士毕业论文题目
- 了解 云原生 和 边缘计算
- 《动手学深度学习》(PyTorch版)代码注释 - 48 【Multi-scale_target_detection】
- 我的人生观、爱情观和世界观
- mc java送win10_微软针对Windows 10的免费Minecraft赠品在Java播放器的午夜结束
- 使用音频分析工具audacity分析wave文件
- cpp 读取txt文件
- python 复数数组_对复数数组进行插值
- Python小白入门分享
- 创造与魔法最新服务器怎么进,创造与魔法9月26日迎来新版本 个人服务器开放...
热门文章
- ubuntu 14.10安装zabbix(lnmp环境)
- 使用class-dump破解ipa获取.h文件
- 几种开源工作流引擎的简单比较(转)
- RabbitMQ入门(4)--路由
- 初识Quartz(三)
- ios时间差,以时间格式显示
- smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...
- “去中心化”为何意义重大?
- 区块链学堂:区块链引子
- 超越技术分析_超越技术面试