前言
软硬件环境:
硬件:PC
软件:ubuntu18.04
本文主要介绍字符设备号, 并对主要的字符设备号相关驱动接口进行相关介绍。
一、字符设备号介绍
1. 字符设备号的组成
字符设备号本质就是一个32位的无符号整型值。高12位为主设备号,低20位为次设备号
内核源码路径: include/linux/kdev_t.h
在知道主,次设备号后,可以使用MKDEV宏去创建字符设备号。
2. 字符设备主设备号范围
早期的内核字符主设备分配范围为0-255,后来由于不够用,对字符主设备号分配范围扩充到0-511,按照动态和静态申请划分情况使用,按照0-255和256-511两段进行详细划分,大概分配状况如下:
范围 | 说明 |
---|---|
0-233 | 静态分配 |
234-254 | 动态分配 |
256-383 | 静态分配 |
384-511 | 动态分配,其中动态分配时先申请234-254范围里的,如果已经使用完毕,则从384~511范围分配给动态申请使用 |
上述范围的值可以从内核源码include\linux\fs.h文件中下面几个宏定义中看出:
具体的分配情况,可以从内核源码Documentation\admin-guide\devices.txt中知道
如V4L2子系统使用的主设备号是81
*DRM子系统使用的主设备号是226
二、如何申请字符设备号
1. 申请字符设备号的相关接口
如下图内核源码include\linux\fs.h文件所示, 为申请字符设备号的相关接口
其中:
register_chrdev_region() 为专门的静态申请字符设备号接口;
alloc_chrdev_region() 为专门的动态申请字符设备号接口;
unregister_chrdev_region() 为专门的字符设备号释放接口;
register_chrdev() 和 unregister_chrdev() 为最简单的字符设备号申请接口和字符设备号释放接口, 它包含了静态和动态申请两种功能;