Linux驱动开发:设备号

Posted Top嵌入式

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux驱动开发:设备号相关的知识,希望对你有一定的参考价值。

文章目录

Linux驱动开发:设备号

一、设备号组成

Linux 中每个设备都有一个设备号,分为:

  • 主设备号:表示某一个具体的驱动
  • 次设备号:表示使用这个驱动的各个设备

Linux 内核代码中使用 dev_t 这个 u32 数据类型表示设备号

typedef __u32 __kernel_dev_t;
typedef __kernel_dev_t dev_t;

这 32 位整型变量高 12 位为主设备号,低 20 位为次设备号

内核提供了一些代码用于操作设备号变量

#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
  • MAJOR 用于从 dev_t 中获取主设备号
  • MINOR 用于从 dev_t 中获取次设备号
  • MKDEV 用于将给定的主设备号和次设备号的值组合成 dev_t 类型的设备号

二、设备号分配

上面知道了设备号的基本知识,在注册设备的时候需要给设备分配一个设备号,设备号的分配有两种方式,静态分配和动态分配

  • 静态设备号分配:设备号的分配由驱动开发者静态指定设备号,分配可能产生设备号冲突
  • 动态设备号分配:设备号的分配由系统自动分配一个没有被使用的设备号,避免了设备号冲突

推荐使用动态设备号分配,分配函数如下:

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
参数功能
dev保存申请到的设备号
baseminor次设备号起始地址
count要申请的设备号数量
name设备名字

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

void unregister_chrdev_region(dev_t from, unsigned count)
参数功能
from要释放的设备号
count从 from 开始,要释放的设备号数量

以上是关于Linux驱动开发:设备号的主要内容,如果未能解决你的问题,请参考以下文章

Linux驱动开发:设备号

linux驱动开发 - 01_字符设备驱动开发

Linux驱动开发-混杂字符设备驱动模型笔记 4

Linux驱动开发-混杂字符设备驱动模型笔记 4

Linux驱动开发-字符设备驱动笔记 2

从Linux内核LED驱动来理解字符设备驱动开发流程