【发布时间】:2020-09-12 15:00:11
【问题描述】:
我有一个 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;
}
【问题讨论】:
-
实际上,即使编译为用户空间程序,您的代码也应该可以工作。
-
嗯?我的意思是您在问题中发布的代码应该可以工作。两个标题
linux/kdev_t.h和linux/types.h都可用于用户空间程序。只需将dev_t device_num = MKDEV(<major>, <minor>);放在函数体中的某个位置即可。 -
@Tsyvarev 它仅在我没有声明具有
dev_t数据类型的变量时才有效,可能是因为它仅由内核使用?error: unknown type name dev_t -
是的,
dev_t仅适用于内核。但你可以使用任何整数类型。 -
@Tsyvarev 是的,我确实使用了
integer。谢谢!如果您想发布答案,欢迎您(:
标签: c linux-kernel linux-device-driver