第九节、申请字符类设备号
本节用于介绍如何申请字符类设备号
1、字符设备和杂项设备的区别(复习)
杂项设备的主设备号是固定的,固定为10,那么我们要学习的字符类设备就需要自己或者系统来给我们分配了。
杂项设备可以自动生成设备节点,字符设备需要我们自己生成设备节点。
2、注册字符类设备号的俩个方法。
第一种:静态分配一个设备号
需要明确知道我们的系统里面那些设备号没有用
文件位置路径:include/linux/fs.h
实际函数位置路径:fs/char_dev.c
1 | extern int register_chrdev_region(dev_t, unsigned, const char *); |
可以通过以下命令查看linux系统中已经注册的字符设备以及对应的注册名称
1 | root@localhost:~# cat /proc/devices |
dev_t类型:
dev_t是用来保存设备号的,是一个32位数
高12位是用来保存主设备号,低20位是用来保存次设备号的
文件位置路径:include/linux/fs.h
1 | typedef __u32 __kernel_dev_t; |
linux提供了几个宏定义来操作设备号
文件位置路径:include/linux/kdev_t.h
1 |
|
第二种:动态分配设备号
文件位置路径:include/linux/fs.h
实际函数位置路径:fs/char_dev.c
1 | extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); |
使用动态分配会优先使用255到234
被废弃的函数:
文件位置路径:include/linux/fs.h
1 | extern int __register_chrdev(unsigned int major, unsigned int baseminor, |
因为此函数在注册设备的时候,第一个传入的参数是主设备号,它会将主设备号下的所有此设备号全部申请,造成资源浪费。
3、注销设备号
文件位置路径:include/linux/fs.h
实际函数位置路径:fs/char_dev.c
1 | extern void unregister_chrdev_region(dev_t, unsigned); |
建议使用动态申请