数据结构

#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字符设备几种注册方式的差异相关推荐

  1. 字符设备编号的注册分配

    内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里.该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char ...

  2. 第12课第3节 字符设备驱动程序之查询方式的按键驱动程序

    第12课第3节 字符设备驱动程序之查询方式的按键驱动程序 cat /proc/devices //查询主设备号 insmod ./second_drv.ko ls /dev/button -l pos ...

  3. JS标签的获取、js curd、事件的四要素、事件的三种注册方式和区别

    1.掌握html和body标签的两种特殊获取方式(*****)---(重点)         html: document.documentElement body: document.body le ...

  4. linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...

    之前我们完成了关于通过查询的方式获取按键键值的驱动程序,可以参考:嵌入式Linux开发--裸板程序之中断控制器. 虽然读取键值没有什么问题,但是测试程序占用CPU过高,一直在不断的查询,资源消耗过大, ...

  5. 【我的C语言学习进阶之旅】介绍一下NDK开发中关于JNI函数的两种注册方式:静态注册和动态注册

    目录 一.要介绍本篇博客的原因 二.静态注册 2.1 实现原理 2.2 实现过程 2.3 弊端 2.4 示例 三.动态注册 3.1 实现原理 3.2 实现过程 3.3 优点 3.4 示例 一.要介绍本 ...

  6. spring初识--bean的几种注册方式

    spring彻底改变了java世界观.spring解决了java 对象管理问题,今天我们来看看spring创建对象的方式有哪些至今还不知道的吧 注册bean的几种方式(IOC) BeanDefinit ...

  7. Android面试,BroadCastReceiver的两种注册方式的异同

    在Android手机应用程序中开发中,需要用到BroadcastReceiver来监听广播的消息.在自定义好BroadcastReceiver ,需要对其进行注册,注册有两种方法: 一种是在代码当中注 ...

  8. SSL请求trustStore的两种注册方式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 如果是要 ...

  9. 字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)

    1.中断方式获取按键值单片机: 1)按键按下 2)cup发生中断,跳转到异常向量入口执行 3)b 函数a.保存被中断的现场b.执行中断处理函数c.恢复 linux: 1)trap_init()函数构造 ...

最新文章

  1. 百度ACE智能交通能提升最高30%城市通行效率,刚刚拿下世界互联网大会最高荣誉...
  2. 【小白学习PyTorch教程】十六、在多标签分类任务上 微调BERT模型
  3. 有关提高visual studio开发效率的方法
  4. CodeForces 1110H. Modest Substrings
  5. 盘点2010年十大出版事件 文著协“宣战”百度文库
  6. 启动一个Java进程
  7. 看printk引发的一点思考
  8. python玩转android_如何用python玩跳一跳 ?(安卓版)
  9. Pycharm的git密码填错了的修改方法
  10. usb audio知识点
  11. 计算机遥感毕设选题,遥感硕士毕业论文题目
  12. 了解 云原生 和 边缘计算
  13. 《动手学深度学习》(PyTorch版)代码注释 - 48 【Multi-scale_target_detection】
  14. 我的人生观、爱情观和世界观
  15. mc java送win10_微软针对Windows 10的免费Minecraft赠品在Java播放器的午夜结束
  16. 使用音频分析工具audacity分析wave文件
  17. cpp 读取txt文件
  18. python 复数数组_对复数数组进行插值
  19. Python小白入门分享
  20. 创造与魔法最新服务器怎么进,创造与魔法9月26日迎来新版本 个人服务器开放...

热门文章

  1. ubuntu 14.10安装zabbix(lnmp环境)
  2. 使用class-dump破解ipa获取.h文件
  3. 几种开源工作流引擎的简单比较(转)
  4. RabbitMQ入门(4)--路由
  5. 初识Quartz(三)
  6. ios时间差,以时间格式显示
  7. smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...
  8. “去中心化”为何意义重大?
  9. 区块链学堂:区块链引子
  10. 超越技术分析_超越技术面试