- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从已弃用的函数 create_proc_read_entry
迁移到使用 proc_create
。我一直在研究使用 seq_files 的新实现。以前,我使用 /proc
文件系统将指针传递给我 copy_from_user
到内核空间的结构。该结构包含我用来确定接下来调用哪个函数的信息(以及其他数据)。我正在为新的实现而苦苦挣扎。具体来说,我如何获取指向从用户空间传递的结构的指针。根据我的研究, seq_files 实现使用 seq 文件方便地迭代结构,而无需处理指针内容。
struct sCmd_t {
u32 length;
u8 type;
int number;
u16 command;
u8 version;
} sCmd_t
ctrl_file = create_proc_read_entry("ctrl",
0666,
PROC_FILE,
read_proc_ctrl,
NULL);
ctrl_file->write_proc = write_proc_ctrl;
static int write_proc_ctrl( struct file *filp, const char __user *buff, unsigned long len, void *data){
sCmd_t *sCmd = NULL;
const unsigned char *curbuf = NULL;
sCmd = (sCmd_t *) kmalloc(sizeof(sCmd_t), GFP_KERNEL);
if (sCmd == NULL)
return ERROR;
memset(cmd, 0, sizeof(sCmd));
curbuf = buff;
if (copy_from_user( cmd, curbuf, sizeof(sCmd_t)))
return -EFAULT;
switch (sCmd->command){
//based on the command the appropriate
}
所以我想做的是从 seq_show 函数获取指向我的结构的指针,但它不起作用。
static int seq_show(struct seq_file *seqfile, void *v)
{
//in here I'm trying to grab a pointer to the struct here
sCmd_t *sCmd = NULL;
const unsigned char *curbuf = NULL;
sCmd = (sCmd_t *) kmalloc(sizeof(sCmd_t), GFP_KERNEL);
if (sCmd == NULL)
return ERROR;
memset(cmd, 0, sizeof(sCmd));
curbuf = v;
if (copy_from_user( cmd, curbuf, sizeof(sCmd_t)))
//blah blah blah.....
return 0;
}
static void *seq_start(struct seq_file *seqfile, loff_t *pos)
{
return pos;
}
static void *seq_next(struct seq_file *seqfile, void *v, loff_t *pos)
{
return pos;
}
static void seq_stop(struct seq_file *seqfile, void *v)
{
return;
}
static struct seq_operations seq_ops = {
.start = seq_start,
.next = seq_next,
.stop = seq_stop,
.show = seq_show
};
static int proc_open(struct inode *inode, struct file *file)
{
return seq_open(file, &seq_ops);
}
static const struct file_operations fops = {
.owner = THIS_MODULE,
.open = proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
ctrl_file = proc_create("ctrl", 0644, proc_dir, &fops);
这只是第一次尝试。当我尝试这段代码时,当我取消引用结构的命令成员时,它会呕吐。正如您所看到的,我的结构非常小,因此该实现不必使用 seq 文件来检查它是否正在另一个页面上运行。这就是为什么我试图捕获 show 函数中的指针,因为我想象它必须迭代或“下一个”到结构或页面。根据我的阅读,seq_file 迭代将使遍历结构变得容易,但我首先需要了解如何获取指向我从用户空间写入 /proc
文件系统的内容的指针。
最佳答案
seq_file
是实现只读文件的助手。show
回调的缓冲区是一个内核缓冲区,您应该在其中写入要返回到用户空间的数据。
您可以选择使用或不使用seq_file
;但在这里没有意义。
但无论如何,procfs 操作都是用 struct file_operations 定义的;要实现写入回调,只需在 fops
中实现 write
即可。
关于c - 从 create_proc_read_entry 迁移到 proc_create 并使用 seq_files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946863/
谁能给我proc_create()例子? 早些时候他们使用了create_proc_entry()在内核中,但现在他们使用 proc_create() . 最佳答案 这是一个“hello_proc”代
已结束。此问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我在编译我的驱动程序模块时收到“函数‘proc_create’的隐式声明”错误。我想在/proc 中创建一个条目并打印正在使用该模块的程序的数量。你能告诉我这里有什么问题吗?这是我的代码。 #incl
我正在尝试从已弃用的函数 create_proc_read_entry 迁移到使用 proc_create。我一直在研究使用 seq_files 的新实现。以前,我使用 /proc 文件系统将指针传递
我是内核编程的新手,正在尝试使用 procfs。我用谷歌搜索了几个例子,他们都使用: proc_create("hello",0,NULL,&proc_fops); 第二个参数是文件模式/权限。根据
我正在尝试将内容加载到我的内核中以了解如何添加内容! 我这里有两个文件! 下面是skynet.c: #include // included for all kernel modules #i
我是一名优秀的程序员,十分优秀!