【发布时间】:2013-10-30 01:40:23
【问题描述】:
所以我正在为类的 linux 内核做一些工作,我正在尝试实现一个函数,但首先我必须在内核空间中定义一个结构。我收到一个错误,但我不太确定原因。
我认为它与我在开始时定义的结构有关,但我似乎找不到任何问题。
更新:好的,我已经解决了其中一个问题。因此,我将更新我的代码 sn-p 并标记错误中指定的行。第 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
知道我做错了什么吗?
【问题讨论】:
-
如果您的第二个 malloc 失败,您应该从第一个 malloc 中释放指针。
-
请在您的代码中添加注释以突出显示第 24 行和第 73 行(您有错误的行)
-
上线,“newNode->data = data;”您可能打算分配 pdata
标签: c linux struct linux-kernel