当前位置: 首页 > news >正文

I.MX6ULL内核开发4:设备号的组成与哈希表

目录

一、设备号

二、hash table


一、设备号

文件夹:/home/geralt/linux_driver/kernel/ebf_linux_kernel_6ull_depth1/include/linux/kdev.h

这里面是linux中关于设备号的具体描述

#define MINORBITS	20
#define MINORMASK	((1U << MINORBITS) - 1)#define MAJOR(dev)	((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev)	((unsigned int) ((dev) & MINORMASK))
#define MKDEV(ma,mi)	(((ma) << MINORBITS) | (mi))

小技巧:在vscode中可使用ctrl+p快捷键快速找到需要的文件。

理论取值范围:

主设备号:2^12=1024*4=4k

次设备号:2^20=1024*1024=1M

  • 已注册的设备号可以使用  cat   /proc/devices  查看

可以看到,这是已经注册过的设备,其中包括设备号和名字。 

  • 内核是希望一个设备驱动(file_operation)可以独自占有一个主设备号和多个次设备号,而通常一个设备文件绑定一个主设备号和一个次设备号,所以设备驱动和设备文件是一对一和一对多的关系。

二、hash table

哈希表、散列表

  • 数组的优缺点:查找快,增删元素效率低,容量固定
  • 链表的优缺点:查找慢,增删元素效率高,容量不限
  • 哈希表:数组+链表
    • 以主设备号为编号,使用哈希表f(major)=major%255来计算数组下标
    • 主设备号冲突(如0,255),则以次设备号为比较值来排序链表节点

哈希函数的设计目标:链表节点尽量平均分布在各个数组元素中,以提高查询效率 

http://www.lryc.cn/news/2924.html

相关文章:

  • 【博学谷学习记录】大数据课程-学习第六周总结
  • Cordova
  • 9.语义HTMLVScode扩展推荐
  • 一款非常不错的微信系统垃圾清理工具:微信清理大师,操作简单,清除较快。
  • PMP考前冲刺2.11 | 2023新征程,一举拿证
  • yalc(比 yarn/npm link 更加友好的前端依赖库 link 方案)
  • Github | 个人资料自述文件配置的不完全总结
  • 2022年12月电子学会Python等级考试试卷(二级)答案解析
  • SpringCloud第二讲 Ribbon负载均衡源码分析
  • Clip-path实现按钮流动边框动画
  • 不停服更新应用的方案:蓝绿发布、滚动发布、灰度发布
  • 有趣的KaTeX(附源码)
  • Golang map笔记
  • Android Jetpack组件之WorkManager高级概念介绍与使用(三)
  • Spring框架中用到的设计模式(都用到了哪些设计模式?)
  • Python中的类和对象(4)
  • window11 安装node及配置环境变量
  • 腾讯云服务器选购新手教程(新版流程超级详细)
  • 第四章 Opencv图像色彩空间与通道
  • 《论文列表》持续更新中......
  • 空间中任意一点到球的截面的最短距离
  • 麦克斯韦方程场分量公式推导
  • freertos学习之路6-任务创建和删除
  • 科都电气创业板IPO终止:曾计划募资约6亿元,郑春开等学历较低
  • 【MySQL】第十六部分 MySQL数据类型详解
  • Linux手工创建新用户
  • K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示
  • 天才少年稚晖君
  • 【Linux command 09】tcpdump 命令
  • 初始结构体