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

What's an easy way to use the MKDEV macro?

我有一个字符设备的次要和主要编号,我想把它们变成dev_t(用来保存设备编号),但我不想做所有的过程构建和编写模块,insmod 将其放入内核等

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

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

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

使用标准的 C 程序显然行不通,因为它是 kernel-code/kernel-space.

Update:编写一个 User-Space 程序确实有效,但我不能使用 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;
}

提供 MKDEV 宏的 header linux/kdev_t.h 也可供用户 space 程序访问。

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

#include <linux/kdev_t.h>

<...>
int device_id = MKDEV(10, 249);