使用 dentry inode 创建的文件与打开的系统调用 inode 之间的关系?

Relationship between file created with dentry inode and open syscall inode?

我正在使用以下代码在 /sys/kernel/debug/test/testFile 中创建一个简单的 debugfs 文件:

pDebugfs = debugfs_create_dir(name, NULL);

if (!pDebugfs)
            goto fail;          

if (!debugfs_create_file("testFile", MODE_T, pDebugfs,
        NULL,  &debugfs_fops)) {
    goto fail;
}

现在,当我写入此文件时,将调用 open 方法,其定义为:

static ssize_t debugfs_open(struct inode *inode, struct file *filp)

现在 dentry 类型的 pDebugfs 有一个指向名为 d_inodeinode 的指针,定义为 here

我的问题是这个inode指针和open中调用的指针有什么关系?他们有关系吗?如果是,如何?我尝试在 i_node 定义中打印 i_flags 值,但它们不匹配,我在 init 中分配 i_flags 并检查其在 [=14= 中的值] 但他们不匹配。

在您的代码中有两个 dentry。在 /sys/kernel/debug/

中创建目录的一个
pDebugfs = debugfs_create_dir(name, NULL);

而且,你没有存储它,但它在那里,一个创建文件的人 open(2):

pDebugfs_file = debugfs_create_file("testFile", MODE_T, pDebugfs, NULL,  &debugfs_fops)

您在 debugfs_open 中看到的 inode 是与文件关联的那个 而不是目录。