使用 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);
我有一个字符设备的次要和主要编号,我想把它们变成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);