嗨,我在做一个关于编译内核的项目。然而,我面对的错误是
fork.c: In function `do_fork':
fork.c:764: request for member `list' in something not a structure or union
简要说明:我使用的是在内核中为每种类型的结构定义的就绪链表(所以我有自己的数据结构),而且,我使用了预定义的函数,如add、traverse、delete node,但是由于这个错误,我不能有任何进展。在这里您可以看到包含我的数据结构的头文件。
/* project_header.h> */
#ifndef __LINUX_PROJECT_HEADER_H
#define __LINUX_PROJECT_HEADER_H
#include <linux/linkage.h>
#include <linux/vmalloc.h>
#include <linux/list.h>
#endif
typedef struct node{
struct list_head list; /* kernel's list structure */
long int sample_pid;
}NODE;
此头文件位于
include/linux
目录中。这是我的系统调用,我将在我的新内核中使用。我全局定义了
projectList
来在其他文件中使用它。#include <linux/sample.h>
#include <linux/project_header.h>
NODE projectList;
asmlinkage void sys_sample(void){
NODE* temp;
list_for_each_entry(temp, &projectList.list, list){
printk(KERN_INFO "TEMP->PID = %ld\n", temp->project_pid);
}
return;
}
我尝试在
fork.c
目录中使用它,在这里您可以看到我添加到kernel/
中的示例代码。另一方面,我用语句调用fork.c
来引用projectList
中定义的 /* do_fork.c */
/* do_fork() function */
#include <linux/project_header.h>
#include <linux/sample.h>
extern projectList; // Call variable projectList
.
.
.
do_fork(parameters..){
struct task_struct* p;
.
.
line 759-->NODE* newNode;
line 760-->newNode = kmalloc(sizeof(*newNode), GFP_KERNEL);
line 761-->newNode->sample_pid = p->pid;
line 762-->INIT_LIST_HEAD(&newNode->list);
/* add the new node to mylist */
line 764--> list_add_tail(&(newNode->list), &(projectList.list));
.
.
.
}
我希望我对你说清楚了,如果你能帮助我,我会很高兴的,谢谢
最佳答案
extern projectList; // Call variable projectList
您忘记在这里声明
projectList
的类型,所以如果编译器处于C89状态,它将应用“implicitint
”规则。因此,您的projectList
是int
中的fork.c
,而不是具有成员的struct
或union
。