2

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

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

我可以从dev_t.

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

当然,我需要内核 API。

4

3 回答 3

4

这很简单:

  1. 使用bdget函数查找block_deviceby dev_t
  2. 使用bdevname获取设备名称。
  3. 使用bdput放置设备引用。

玩得开心。

于 2012-12-21T09:04:19.030 回答
1

您也可以使用libudev. 由于您已经拥有dev_tid,因此这种方式更加简单。

#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);
于 2014-05-08T15:41:34.293 回答
0

通常,您无法进行如此简单的反向映射。这是因为知道一些主要和主要数字,一个人总是可以mknod用来在任何地方创建有效的设备文件,不一定在/dev.

归根结底,内核并不关心具有特定主要/次要的任何特定设备节点是如何产生的——这样的节点只是内核设备驱动程序的入口点,可以处理这个硬件或软件设备。

当然,实际上在大多数现代 Linux 系统上,大多数设备节点都位于/dev其中并由其维护udev- 但它是用户空间守护进程,您的内核驱动程序无法与之通信。另请注意,udev可以配置为创建具有任何名称的新设备节点。

于 2012-12-21T08:40:42.173 回答