2013-01-02 58 views
1

嗨,我正在編譯內核的項目。不過,我面臨着它說fork.c:764:請求成員`列表'的東西不是一個結構或工會

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; 

這個頭文件是在位置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 with語句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)); 

    . 
    . 
    . 
    } 

定義我希望我是明確的給你,我會很高興,如果你能幫助我,我還是謝謝你

+1

很難跟蹤每個源文件中的內容。你可以創建一個[SSCCE](http://sscce.org)測試用例嗎? –

+3

不要打擾你,但是如果你自己無法解決一個簡單的編譯器錯誤,那麼你可能還沒有進行內核編程。 – 2013-01-02 00:36:15

+0

我試過很簡單,相信我這是最簡單的符號。我可以解釋一下。我有一個包含結構的頭文件,在我自己定義的系統調用中,我定義了一個全局結構類型,並在fork.c中用extern前綴 – quartaela

回答

1
extern projectList; // Call variable projectList 

您忘記在此處聲明projectList的類型,因此如果編譯器處於C89心情,則會應用「隱式int」規則。因此您的projectListintfork.c,而不是structunion有成員。

+0

是的最後它的作品。我從這裏讀取了extern變量的用法,它需要幾個小時才能識別出來。感謝您的回覆:) http://stackoverflow.com/questions/3989607/accessing-static-variable-value – quartaela

相關問題