linux内核:如何获取';结构文件';设备文件内核内的指针?

linux内核:如何获取';结构文件';设备文件内核内的指针?,linux,linux-kernel,filesystems,linux-device-driver,file-structure,Linux,Linux Kernel,Filesystems,Linux Device Driver,File Structure,有没有办法在linux内核中获取设备文件的struct file指针?我正在编写一个内核模块。我想访问scsi设备(例如/dev/sg1)的文件*。我可以从内核访问它而不必在用户空间中打开设备吗 或者,如果我在用户空间中打开所述设备并将fd传递给我的内核模块,是否有方法将fd转换为文件* 我可以从内核访问它而不必在用户空间中打开设备吗 否,struct file对象仅由内核为打开的文件创建 如果我在用户空间中打开所述设备并将fd传递给我的内核模块,是否有方法将fd转换为“file*” 只需使用f

有没有办法在linux内核中获取设备文件的
struct file
指针?我正在编写一个内核模块。我想访问scsi设备(例如/dev/sg1)的
文件*
。我可以从内核访问它而不必在用户空间中打开设备吗

或者,如果我在用户空间中打开所述设备并将fd传递给我的内核模块,是否有方法将fd转换为
文件*

我可以从内核访问它而不必在用户空间中打开设备吗

否,
struct file
对象仅由内核为打开的文件创建

如果我在用户空间中打开所述设备并将fd传递给我的内核模块,是否有方法将fd转换为“file*”

只需使用
fdget
函数:

// 'fd' variable contains file descriptor, passed from the user.
struct fd f; // NOTE: 'struct fd' has nothing common with 'fd' variable.
f = fdget(fd);
if(!f.file) { /*process error*/ }
... // Use f.file object
fdput(f);

这是内核核心和驱动程序(模块)共同使用的场景
struct fd
是在
include/linux/file.h

中定义的,通过调用anon\u inode\u getfile(),您可以创建一个匿名文件实例,该实例绑定了您选择的文件操作。在某些情况下,通过使用设备文件操作,您可以使用它来执行您想要执行的操作

dev_filp = anon_inode_getfile("[/dev/foo]", &foo_fops, NULL, O_RDWR);
if (IS_ERR(dev_filp))
        return PTR_ERR(dev_filp);