如何使用主号和次号获取设备文件名

时间:2012-12-21 00:35:53

标签: linux linux-kernel

我正在尝试在块io中添加一些调试消息来跟踪linux内核中的io操作。

IO可能发生在多个块设备上,我有dev_t值。

我可以从dev_t获得主要和次要号码。

我想知道有没有办法从/dev/目录使用这些主要和次要号码获取设备文件名?

当然,我需要内核API。

3 个答案:

答案 0 :(得分:3)

很简单:

  1. 使用bdget功能查找block_device dev_t
  2. 使用bdevname获取设备名称。
  3. 使用bdput设置设备参考。
  4. 玩得开心。

答案 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可以配置为创建具有任何名称的新设备节点。