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()函数构造 ...
最新文章
- [置顶] 单例模式lua实现
- 嵌入式小白到大神学习全攻略(学习路线+课程+学习书籍+练习项目)
- UNIX再学习 -- 错误和警告
- 七十九、深度和广度优先搜索算法
- “悟道”公开课第四讲丨悟道开发案例:​悟空策论——议论文写作平台
- java runtime类高级,java入门 -- RunTime类
- date oracle 显示毫秒_Oracle中根据Date型转换成Java对应的long型毫秒数
- spring cloud连载第一篇之bootstrap context
- plt.subplots中的ax = ax.flatten()
- mysql update修改数据_MySQL UPDATE:修改数据(更新数据)
- 中鸣投篮机器人怎么组装_1000余人参加洛阳市青少年机器人竞赛
- TCP,UDP学习总结
- 数据可视化图表有哪些类型
- 板块拥挤度的相对强度rps
- 网上体育商城的设计与实现毕业设计论文
- 烧牛肉,烧肥肠,泡椒兔,炸胡豆炸豌豆?做法指南
- 什么是MySQL数据空洞?
- Python爬取问卷星内容
- 【每日蓝桥】13、一三年省赛Java组真题“黄金连分数”
- 在CentOS 8 下yum install curl时报错