我正在尝试在块 io 中添加一些调试消息以跟踪 linux 内核中的 io 操作。
IO 可能发生在多个块设备上,我对我dev_t
有价值。
我可以从dev_t
.
我想知道有没有办法/dev/
使用这些主要和次要号码从 dir 获取设备文件名?
当然,我需要内核 API。
我正在尝试在块 io 中添加一些调试消息以跟踪 linux 内核中的 io 操作。
IO 可能发生在多个块设备上,我对我dev_t
有价值。
我可以从dev_t
.
我想知道有没有办法/dev/
使用这些主要和次要号码从 dir 获取设备文件名?
当然,我需要内核 API。
您也可以使用libudev
. 由于您已经拥有dev_t
id,因此这种方式更加简单。
#include <libudev.h>
// Create the udev context.
struct udev *udev = udev_new();
// Create de udev_device from the dev_t.
struct udev_device *dev = udev_device_new_from_devnum(udev, 'b', sb.st_dev);
// Finally obtain the node.
const char* node = udev_device_get_devnode(dev);
udev_unref(udev);
通常,您无法进行如此简单的反向映射。这是因为知道一些主要和主要数字,一个人总是可以mknod
用来在任何地方创建有效的设备文件,不一定在/dev
.
归根结底,内核并不关心具有特定主要/次要的任何特定设备节点是如何产生的——这样的节点只是内核设备驱动程序的入口点,可以处理这个硬件或软件设备。
当然,实际上在大多数现代 Linux 系统上,大多数设备节点都位于/dev
其中并由其维护udev
- 但它是用户空间守护进程,您的内核驱动程序无法与之通信。另请注意,udev
可以配置为创建具有任何名称的新设备节点。