使用MKDEV宏的简单方法是什么?

时间:2020-09-12 15:00:11

标签: c linux-kernel linux-device-driver

我有一个char设备的次编号和主编号,我想将它们转换为dev_t(用于保存设备编号),但是我不想做所有的构建和构造过程。编写模块,insmod插入内核等。

使用MKDEV宏是一种简单快捷的方法吗?

#include <linux/kdev_t.h>
#include <linux/types.h>

dev_t device_num = MKDEV(int major, int minor);

使用标准的 C 程序显然不起作用,因为它是内核代码/内核空间。

更新:编写用户空间程序确实可以,但是我不能使用dev_t数据类型,也许是因为它只能由内核使用吗?

#include <linux/kdev_t.h> // MKDEV
#include <linux/types.h> // dev_t
#include <stdio.h> // I/O

int main(void)
{
    int device_id = MKDEV(10, 249);
    printf("%d\n", device_id); // 2809
    return 0;
}

1 个答案:

答案 0 :(得分:0)

用户空间程序也可以访问提供MKDEV宏的标头linux/kdev_t.h

用户空间程序无法访问dev_t类型的定义(对于内核和用户,标题linux/types.h 不同),但是对于MKDEV的结果而言您可以使用16位或更多的任何整数类型。

#include <linux/kdev_t.h>

<...>
int device_id = MKDEV(10, 249);
相关问题