天天看点

linux驱动开发--字符设备:静态分配设备号

字符设备(char device)

        采用字节流方式访问的设备称为字符设备,通常智能采用顺序访问方式,也有极少数可以前后移动访问指针的设备(如:帧捕捉卡等设备)。系统标准字符设备,例如:字符中断、串口等设备。常见待开发设备驱动的字符设备,例如:触摸屏、键盘、视频捕捉设备、音频设备等。

linux驱动开发--字符设备:静态分配设备号

设备号

主设备号

    用于标识设备类型,内核代码根据该号码对应设备文件和对应的设备驱动程序

次设备号

    用于标识通类型的不同设备个体,驱动程序根据该号码辨别具体操作的是哪个设备个体。

设备号数据类型

   dev_t 本质是一个unsigned int 数据类型, 高12位是主设备号,低20位是次设备号。<linux/kdev_t.h>

提取主设备号宏

    unsigned int major(dev_t dev);

提取次设备号宏

    unsigned int minor(dev_t dev);

合成设备号宏

   dev_t mkdev(unsigned int ma, unsigned int mi);

设备号的静态分配

内核源代码documentation/devices.txt文件

该文件列出本内核源代码发行包中已经被使用和可以使用的主设备号

在devices.txt中寻找可用的主设备号。

int register_chrdev_region(dev_t from, unsigned count, const char *name);

from:待申请的设备号

count:待申请的设备号数目

name:设备名称(出现在/proc/devices)

返回:成功返回0,失败返回负值。

向内核申请从from开始的count个设备号(数设备号不变,次设备号增加)

继续阅读