我正在尝试在块io中添加一些调试消息来跟踪linux内核中的io操作。
IO可能发生在多个块设备上,我有dev_t
值。
我可以从dev_t
获得主要和次要号码。
我想知道有没有办法从/dev/
目录使用这些主要和次要号码获取设备文件名?
当然,我需要内核API。
答案 0 :(得分:3)
答案 1 :(得分:1)
您也可以使用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);
答案 2 :(得分:0)
一般情况下,你不能做这种简单的反向映射。这是因为了解一些主要和主要数字后,可以随时使用mknod
在任何地方创建有效的设备文件,而不一定在/dev
下。
在一天结束时,内核并不关心具有某些主要/次要的任何特定设备节点是如何产生的 - 这样的节点只是可以处理此硬件或软件设备的内核设备驱动程序的入口点。
当然,在大多数现代Linux系统的实践中,大多数设备节点位于/dev
并由udev
维护 - 但它是用户空间守护程序,您的内核驱动程序无法与之通信。另请注意,udev
可以配置为创建具有任何名称的新设备节点。