设备号作用:
主设备号 用来标识与设备文件相连的驱动程序. 用来反映设备类型.
次设备号 被驱动程序用来辨别操作的是哪一个设备. 用来区分同类型的设备.
字符设备文件 和 字符设备驱动 如何建立起对应关系:
通过的是主设备号.
{ 解释:字符设备文件 对应了一个主设备号, 字符设备驱动也对应了一个主设备号,
当两个 主设备号 一样时,那么 这 字符设备文件 和 字符设备驱动 两者是匹配的,是对应的. }
字符设备文件 解释:
字符设备文件 本身没有太多的内容,通过 字符设备文件 能找到 字符设备驱动程序 ,
字符设备文件 能将 应用程序 的需求传递给 字符设备驱动程序.
主、次设备号:
内核中如何描述设备号:
使用的是 dev_t 这个类型,其实质是unsigned int 32 位整数,其中高 12 位为主设备号,
低 20 位 为 次设备号.
如何从 dev_t 中 分解出主、次设备号:
主设备号: MAJOR( dev_t dev ) , 次设备号 MINOR( dev_t dev ) .
如何分配主设备号:
Linux 内核可以采用 静态申请 和 动态申请 两种方法.
静态申请:
方法:
1,根据 Documentation/devices.txt ,确定一个没有使用的主设备号.
2,使用 register_ chrdev_region 函数注册设备号.
优点: 简单.
缺点:一旦驱动被广泛使用,这个随机选定的主设备号可能会导致设备号冲突,
而使驱动程序无法注册.
函数:int register_ chrdev_region ( dev_t from , unsigned count , const char * name )
要注册的设备号 要注册设备号的个数 设备名(体现在 /proc/devices)
动态分配:
方法:使用alloc_chrdev_region 分配设备号.
有点:易于推广.
缺点:无法在安装驱动前创建 设备文件 ( 因为安装前没有分配到 主设备号) .
解决办法:安装驱动后,从 /proc/devices 查询设备号.
函数:int alloc_chrdev_region ( dev_t *dev , unsigned baseminor , unsigned count , const char * name )
分配到的设备号 起始次设备号 要注册设备号的个数 设备名(体现在 /proc/devices)
注销设备号:
不论使用何种方法分配到的设备号,都应该在不使用它们时释放这些设备号.
函数: void unregister_chrdev_region ( dev_t from , unsigned count)
释放从from开始的 count 个设备号.
创建设备文件方法 - 2种:
1,使用 mknod 命令手工创建.
2,自动创建(驱动程序来实现).
mknod 用法:
mknod filename type major minor
设备文件名 设备文件类型 主设备号 次设备号
eg. mknod serial0 c 100 0 .
本文深入探讨了Linux字符设备驱动中的设备号作用及其与设备文件的对应关系,解释了如何通过主设备号建立两者之间的联系,并详细说明了字符设备文件的作用、主、次设备号的描述及内核中的分配方式。文章还介绍了如何在Linux内核中进行设备号的静态和动态申请、注销,以及创建设备文件的方法。
1959

被折叠的 条评论
为什么被折叠?



