register_chrdev_region 举例
时间: 2023-06-16 15:04:30 浏览: 146
`register_chrdev_region` 是 Linux 内核中的一个函数,用于向系统注册一个字符设备号。下面是一个 `register_chrdev_region` 的示例:
```c
#include <linux/module.h>
#include <linux/fs.h>
dev_t dev_num;
static int __init my_init(void) {
int ret;
/* 申请设备号 */
ret = alloc_chrdev_region(&dev_num, 0, 1, "my_device");
if (ret < 0) {
printk(KERN_ERR "Cannot allocate device number\n");
return ret;
}
printk(KERN_INFO "Device number: %d:%d\n", MAJOR(dev_num), MINOR(dev_num));
return 0;
}
static void __exit my_exit(void) {
/* 释放设备号 */
unregister_chrdev_region(dev_num, 1);
printk(KERN_INFO "Unregistered device number\n");
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("Example of register_chrdev_region");
```
在上面的示例中,我们使用 `alloc_chrdev_region` 函数来申请一个设备号,并将其保存在 `dev_num` 变量中。`alloc_chrdev_region` 函数的第一个参数是一个指向 `dev_t` 类型变量的指针,用于保存申请到的设备号。第二个参数是设备号的起始值,一般情况下为 0。第三个参数是设备号的数量,这里我们只需要一个设备号,所以为 1。第四个参数是设备名称。
在模块的退出函数中,我们使用 `unregister_chrdev_region` 函数来释放设备号。
注意,在使用 `register_chrdev_region` 和 `unregister_chrdev_region` 函数时,需要包含 `linux/fs.h` 头文件。
阅读全文