我正在处理一些linux内核内容,我有一个名为/dev/blah/任何指向/dev/block/real_device的假路径
问题是,lookup_bdev将无法遵循符号链接,所以我想通过获取真正的路径(/dev/block/ real )来提前调整路径,这样我就可以将它传递给lookup_bdev,这样它就可以成功地返回,而不是一个错误。
或任何其他内核调用,这些调用将正确检索给定初始路径的block_device信息。
谢谢
发布于 2015-01-29 20:47:21
为此使用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 */
}
}这在普通Linux 3.12上进行了测试。
注意,d_path()可能会返回特殊文件系统的奇怪结果,并将(deleted)后缀添加到已删除的文件中。
发布于 2015-01-30 17:19:41
尝试使用sys_readlink()系统调用。
https://stackoverflow.com/questions/28221166
复制相似问题