こんにちは、カーネルのコンパイルに関するプロジェクトに取り組んでいます。しかし、私は言うエラーに直面しています
fork.c: In function `do_fork':
fork.c:764: request for member `list' in something not a structure or union
簡単な説明: 私はすべてのタイプの構造に対してカーネルで定義されている準備ができているリンク リストを使用しています (したがって、私は独自のデータ構造を持っています)。しかし、このエラーのため、私は何の進歩もありません。ここで、データ構造体を含むヘッダー ファイルを確認できます。
/* 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;
このヘッダー ファイルは locationinclude/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
するステートメントで呼び出しますextern projectList
sample.c
/* 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));
.
.
.
}
私はあなたにはっきりしているといいのですが、あなたが私を助けてくれればとてもうれしいです.とにかくありがとう