什么是设备号

linux中设备号是用来标记一类设备以及区分这类设备中具体个体的一组号码,由主设备号和次设备号组成,主设备号用来标记设备的类型,次设备号用来区分在这类设备中具体的个体设备。

主设备号:用来标识与设备文件相关的驱动程序,        ——反应设备类型

次设备号:为内核所用,被驱动程序用来辨别操作那个设备文件    ——区分同类型的具体某个设备

1、设备号的组成

Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分 组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。Linux 提供了 一个名为 dev_t 的数据类型表示设备号,dev_t 定义在文件 include/linux/types.h 里面,定义如下:

12 typedef __u32 __kernel_dev_t;

......

15 typedef __kernel_dev_t dev_t;

可以看出 dev_t 是__u32 类型的,而__u32 定义在文件 include/uapi/asm-generic/int-ll64.h 里 面,定义如下:

26  typedef unsigned int __u32;

dev_t 其实就是 unsigned int 类型,是一个 32 位的数据类型。这 32 位的数据构成了主设备号和次设备号两部分,其中高 12 位为主设备号,低 20 位为次设备号。因此 Linux 系统中主设备号范围为 0~4095,所以大家在选择主设备号的时候一定不要超过这个范围。在文 件 include/linux/kdev_t.h 中提供了几个关于设备号的操作函数(本质是宏)。

#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))

宏 MINORBITS 表示次设备号位数,一共是 20 位。

宏 MINORMASK 表示次设备号掩码。

宏 MAJOR 用于从 dev_t 中获取主设备号,将 dev_t 右移 20 位即可。

宏 MINOR 用于从 dev_t 中获取次设备号,取 dev_t 的低 20 位的值即可。

宏 MKDEV 用于将给定的主设备号和次设备号的值组合成 dev_t 类型的设备号。

2、设备号的分配

1、静态分配设备号

注 册字符设备的时候需要给设备指定一个设备号,这个设备号可以是驱动开发者静态的指定一个 设备号,比如选择 200 这个主设备号。有一些常用的设备号已经被 Linux 内核开发者给分配掉 了,使用“cat /proc/devices”命令即可查看当前系统中所有已经使用了的设备号。

2、动态分配设备号

静态分配设备号需要我们检查当前系统中所有被使用了的设备号,然后挑选一个没有使用 的。而且静态分配设备号很容易带来冲突问题,Linux 社区推荐使用动态分配设备号,在注册字 符设备之前先申请一个设备号,系统会自动给你一个没有被使用的设备号,这样就避免了冲突。

卸载驱动的时候释放掉这个设备号即可,设备号的申请函数如下:

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char*name)

函数 alloc_chrdev_region 用于申请设备号,此函数有 4 个参数:

dev:保存申请到的设备号。

baseminor:次设备号起始地址,alloc_chrdev_region 可以申请一段连续的多个设备号,这 些设备号的主设备号一样,但是次设备号不同,次设备号以 baseminor 为起始地址地址开始递 增。一般 baseminor 为 0,也就是说次设备号从 0 开始。

count:要申请的设备号数量。

name:设备名字。

注销字符设备之后要释放掉设备号,设备号释放函数如下:

void unregister_chrdev_region(dev_t from, unsigned count)

此函数有两个参数:

from:要释放的设备号。

count:表示从 from 开始,要释放的设备号数量

Linux驱动设备号相关推荐

  1. 嵌入式linux mtd,嵌入式Linux驱动设备之MTD技术详解

    原标题:嵌入式Linux驱动设备之MTD技术详解 MTD(memory technology device内存技术设备)是用于访问memory设备(ROM.flash)的Linux的子系统. MTD的 ...

  2. linux驱动-设备驱动模型(driver驱动)

    文章目录 1.数据结构 1) device_driver 2) driver_private 2.driver的注册 3.driver_register 总结 1) 在sys/创建对应节点 2) 匹配 ...

  3. linux驱动 设备驱动模型

    前言 在早期的Liux内核中并没有为设备驱动提供统一的设备模型.随着内核的不断扩大及系统更加复杂,编写一个驱动程序越来越困难,所以在Liux2.6内核中添加了一个统一的设备模型.这样,写设备驱动程序就 ...

  4. linux 字符设备号分配状况

    字符设备主设备号范围 早期的内核字符主设备分配范围为0~255,后来由于不够用,对字符主设备号分配范围扩充到0~511,按照动态和静态申请划分情况使用,按照0~255和256~511两段进行详细划分, ...

  5. linux主次设备号介绍

    http://www.zhiwenweb.cn/Category/Learning/linux-major-minor-dev-number.html 1.主设备号与次设备号的功能 在Linux内核中 ...

  6. Linux查看设备号

    Linux的设备管理是和文件系统紧密结合的,把设备和文件关联起来,这样系统调用可以直接用操作文件一样的方法来操作设备.各种设备都以文件的形式存放在/dev目录下,称为设备文件.应用程序可以打开.关闭和 ...

  7. linux tty设备号,linux tty设备

    /dev/console是什么 如果系统中存在多个tty设备,想象一下,这时内核启动的log应该打印在哪里,这时内核会从tty中选择一个最合适的作为console,当然内核启动参数中也可以明确的去指定 ...

  8. linux驱动设备信息失败怎么办,Linux设备驱动程序(LDD)中snull的编译问题 《转》

    对LDD中snull程序,编译的时候会有许多问题,鉴于网上还没有合适的解决办法,做此总结,整理知识.本文在debian6.0上运行通过,内核版本为2.6.32. 学习LDD中网络驱动程序部分,理解sn ...

  9. linux驱动设备树

    手动注册ID 虚拟伪总线接口 地址资源映射 权限与认证 其它都是传统驱动结构,重复劳动而已.

最新文章

  1. [WinError 10038] 在一个非套接字上尝试了一个操作
  2. 使用jQuery操作Cookies的实现代码
  3. [python爬虫] 招聘信息定时系统 (二).调用pyinstaller包生成exe文件
  4. Windows下安装Mysql5.7.22以及遇到的问题 + 数据库连接工具Navicat
  5. document.compatMode的CSS1compat
  6. python量化交易是什么意思_量化交易通俗解释是什么?
  7. 同花顺l2接口使用体验感怎么样?
  8. 利用Python,通过关键字获取漏洞平台最新漏洞信息
  9. 常见的浏览器内核有哪些?
  10. vue使用百度地图3.0,使用JavaScriptAPI版,聚合点,个性化地图切换卫星地图
  11. android应用是非正式版本,华为手机自带浏览器,应用是非正式发布版本,当前设备不支持安装
  12. [*CTF2019]She buuctf
  13. php laydate,layDate日期控件使用方法详解
  14. java 读取excel2007 内存不足_内存不足错误 – 写入Excel时的Java堆空间
  15. MySQL8.0版本选型建议
  16. 一部精彩电影《十面埋妇》
  17. 全球及中国非小细胞肺癌药物行业研究及十四五规划分析报告
  18. 十个人口稀少地区的顶级域名
  19. laravel使用phpword生成word文档
  20. android 卸载应用流程

热门文章

  1. python 量子计算包_ProjectQ:解锁Python实现量子计算的新方式!
  2. BitTorrent (协议)
  3. linux 登陆sybase_SYBASE在linux下的安装
  4. 在Android平台启动Linux C/C++应用程序
  5. 这支研自985药学教授的祛痘神器,刷爆了大学朋友圈
  6. 计算机考研学校难度排行榜,计算机考研难度排行榜新鲜出炉 - 深圳远途教育
  7. (保姆教学)Failed to connect to github.com port 443 after 21094 ms: Timed out
  8. 绿色至未来,积极应对树木资源消耗问题-FSC认证
  9. 网教9. 一夜发白《千字文》
  10. matlab十字路口车流量仿真,基于高斯径向基函数神经网络的十字路口车流量预测...