因此,我在Linux内核上为类做一些工作,并且尝试实现一个函数,但首先必须在内核空间中定义一个结构。我收到一个错误,但我不太确定原因。
我认为它与我一开始定义的结构有关,但似乎找不到任何问题。
更新:好的,我已经解决了其中一个问题。因此,我将更新我的代码段并标记错误中指定的行。第24行是该结构结尾之后的行。
这是我在做什么:
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/klist.h>
#include <linux/errno.h>
#include <asm/uaccess.h>
#include <linux/slab.h>
/********************************************
*This function adds a new item to the queue
*
*If not enough memory return -ENOMEM
*If there is an error accessing the upper space point return -efault
*If len is negative return -EINVAL
*Returns 0 on success
******************************/
struct dataNode
{
const void * data;
int length;
struct list_head * mylist;
}
asmlinkage long sys_writeMsgQueue421(const void __user *data, long len) //**Line 24**//
{
newNode->data = pdata;
newNode->length = len;
//****Need to add to the linked list****//
printk("This was passed in: %p and %ld \n",data , len);
return 0;
}
asmlinkage long sys_readMsgQueue421(void)
{
printk("This is the read function!\n");
return 0;
}
asmlinkage long sys_emptyMsgQueue421(void)
{
printk("This is the clear function!\n");
return 0;
}
运行make命令时出现以下错误:
CC msgQueue421 / msgQueue421.o msgQueue421 / msgQueue421.c:24:1:
警告:“ regparm”属性仅适用于函数类型
[-Wattributes] msgQueue421 / msgQueue421.c:24:12:错误:预期为“;”,
标识符或'('在'long'make [1]之前:
[msgQueue421 / msgQueue421.o]错误1:* [msgQueue421]错误2
知道我在做什么错吗?
最佳答案
知道24 + 73行是什么,这很高兴,但“ const”可能是由
newNode->data = data;
您要在此处分配
pdata
(而不是__user指针)。对第一个错误组进行盲目的猜测:缺少一个#include,因此未定义__user。
顺便说一句:
struct list_head * mylist;
在您严格中很可能是错误的,因为您不能取消引用它。使用普通的
struct list_head mylist;
而不是关于c - 在Linux内核空间中创建结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19672344/