4

我正在研究一些 linux 内核的东西,我有一个名为 /dev/blah/whatever 的假路径指向 /dev/block/real_device

问题是lookup_bdev将无法遵循符号链接,所以我想通过获取真实路径(/dev/block/real_device)预先按摩路径,这样我就可以将它交给lookup_bdev所以它成功返回而不是错误.

或者任何其他可以正确检索给定初始路径的 block_device 信息的内核调用。

谢谢

4

2 回答 2

4

为此使用 VFS 层(特别是 dcache/nameidata)。

#include <linux/namei.h>
#include <linux/dcache.h>

...

struct path path;
char buf[256];
char* ptr;
int err = kern_path("/dev/disk/by-id/dm-name-lkdevel-root", 
                    LOOKUP_FOLLOW, &path);

if(!err) {
    ptr = d_path(&path, buf, 256);        

    if(!IS_ERR(ptr)) {
        /* ptr contains real path */
    }
}

这是在 vanilla Linux 3.12 上测试的

请注意,d_path()对于特殊文件系统可能会返回奇怪的结果,并将(deleted)后缀附加到已删除的文件中。

于 2015-01-29T20:47:21.183 回答
0

尝试使用 sys_readlink() 系统调用。

于 2015-01-30T17:19:41.527 回答