1

こんにちは、カーネルのコンパイルに関するプロジェクトに取り組んでいます。しかし、私は言うエラーに直面しています

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 projectListsample.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));

     .
     .
     .
    }

私はあなたにはっきりしているといいのですが、あなたが私を助けてくれればとてもうれしいです.とにかくありがとう

4

1 に答える 1

1
extern projectList; // Call variable projectList

ここでの型を宣言するのを忘れたprojectListので、コンパイラが C89 モードの場合、"暗黙のint" ルールが適用されます。したがって、 yourprojectListintinであり、メンバーを持つorではfork.cありません。structunion

于 2013-01-02T01:59:47.243 に答える