gpt4 book ai didi

从内核模块创建 shm 文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:19 29 4
gpt4 key购买 nike

我正在尝试打开一个 shm 文件以在内核和用户进程之间共享数据。下面是我的内核模块代码。 Sys 日志输出表明没有遇到错误。加载模块后,我看不到我试图在/dev/shm 中创建的文件。我做错了什么?

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/shmem_fs.h>

static int __init moduleLoader(void) {
struct file *shfile;

printk(KERN_INFO "shkmod is loading...\n");

shfile = shmem_file_setup("MyShmFile",sizeof(int),0);
printk("shmem_file_setup returned %p\n",shfile);
if (IS_ERR(shfile))
printk("shmem_file_setup returned error.\n");
printk("shfile is: %s\n", shfile->f_path.dentry->d_name.name);

printk(KERN_INFO "shkmod is done loading.\n");
return 0;
}

static void __exit moduleUnloader(void) {
printk(KERN_INFO "shkmod was unloaded.\n");
return;
}

module_init(moduleLoader);
module_exit(moduleUnloader);

MODULE_AUTHOR("Yaron Shragai");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Lorem ipsum dolor sit amet");

这是系统日志中的输出:

Jun  6 15:25:59 yaron-VirtualBox kernel: [457160.335482] shkmod is loading...
Jun 6 15:25:59 yaron-VirtualBox kernel: [457160.335487] shmem_file_setup returned ffff8801fef53b00
Jun 6 15:25:59 yaron-VirtualBox kernel: [457160.335488] shfile is: MyShmFile
Jun 6 15:25:59 yaron-VirtualBox kernel: [457160.335488] shkmod is done loading.

$ uname -a
Linux yaron-VirtualBox 4.4.0-57-generic#78-Ubuntu SMP Fri Dec 9 23:50:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

最佳答案

/**
* shmem_file_setup - get an unlinked file living in tmpfs

评论明确指出该文件不会出现在任何地方。

 * @name: name for dentry (to be seen in /proc/<pid>/maps

...而名称是要在 map 上显示一些东西。

 * @size: size to be set for the file
* @flags: VM_NORESERVE suppresses pre-accounting of the entire object size
*/
struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags)
{
return __shmem_file_setup(name, size, flags, 0);
}

不过还是有道理的。您没有指定任何文件系统,只是使用了一个作为开头的相对路径的名称。为什么您希望该文件专门出现在/dev 中?

像往常一样,真正的问题是您正在处理的实际问题是什么。

如果碰巧确实需要共享文件,用户空间应该创建一个并告诉内核使用它。

关于从内核模块创建 shm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398868/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com