2015-08-22 7 views
6

में एक प्रोटोटाइप नहीं है, मैं शुरुआत के रूप में लिनक्स के लिए कर्नेल मॉड्यूल लिखना सीख रहा हूं। मैं जो करने की कोशिश कर रहा हूं वह है कि प्रत्येक कार्य और उसके बच्चे की प्रक्रिया को डीएफएस एल्गोरिदम का उपयोग करके कर्नेल लॉग में लिखना है। लेकिन जब मैं Makefile का उपयोग कर कोड संकलन है, यह ऊपर त्रुटि दिखाता है:फंक्शन घोषणा सी

function declaration isn’t a prototype [-Werror=strict-prototypes] 
struct task_struct *current; 

यह बताते समारोह डीएफएस पर task_struct कीवर्ड। यहाँ मेरी कोड है:

# include <linux/init.h> 
# include <linux/kernel.h> 
# include <linux/module.h> 
# include <linux/sched.h> 
# include <linux/list.h> 

void DFS (struct task_struct *task) 
{ 
    struct task_struct *current; 
    struct list_head *list; 

    list_for_each (list, &task->children) 
    { 
     current = list_entry(list, struct task_struct, sibling); 
     printk(KERN_INFO "%d\t%d\t%s \n", (int)current->state, current->pid, current->comm); 

     if (current != NULL) 
     { 
      DFS(current); 
     } 
    } 
} 

int DFS_init(void) 
{ 
    printk(KERN_INFO "Loading the Second Module...\n"); 

    printk(KERN_INFO "State\tPID\tName\n"); 

    DFS(&init_task); 

    return 0; 
} 

void DFS_exit(void) 
{ 
    printk(KERN_INFO "Removing the Second Module...\n"); 
} 

किसी को भी जानता है कि यह कैसे तय करने के लिए ??

+0

क्यों _votedown_ ?? क्या तुम समझा सकते हो ?? –

+3

सी 'वर्तमान' की अनुमति देता है। शायद आपके द्वारा शामिल हेडर में कुछ है? –

+9

कर्नेल में, 'वर्तमान' एक वैश्विक रूप से दृश्यमान चर (सूचक) है जो वर्तमान प्रक्रिया-तालिका-प्रविष्टि को इंगित करता है। – wildplasser

उत्तर

4

केर्नल में current नामक एक मैक्रो है जो वर्तमान में प्रक्रिया निष्पादित करने वाले उपयोगकर्ताओं को इंगित कर रहा है। This book राज्यों,

The current pointer refers to the user process currently executing. During the execution of a system call, such as open or read, the current process is the one that invoked the call.

दूसरे शब्दों में, @GilHamilton टिप्पणी में उल्लेख किया है, current Kernal में समारोह get_current() करने के लिए #define घ है।

तो, एक चर नाम के रूप में current का उपयोग कर संकलन-समय त्रुटि प्रदान करेगा !!!

+0

उम ... यदि 'वर्तमान' एक चर था, तो आपके कोड में इसका उपयोग करने से कोई त्रुटि नहीं होगी। यह क्यों होगा यहां पूरा बिंदु यह है कि 'वर्तमान' एक चर नहीं है, यह वास्तव में एक * मैक्रो * है। – AnT

+0

@ एएनटी वैसे मैं इस में समर्थक नहीं हूं। लेकिन परिवर्तनीय नाम का नाम बदलने से मेरी समस्या हल हो गई। तो ऐसा लगता है कि त्रुटि परिवर्तनीय नाम, 'वर्तमान' में है। (क्या नाम 'वर्तमान' के पास __ कर्नल मॉड्यूल__ में कुछ भी करना है?) –

+0

अगस्त 2015 में गिल हैमिल्टन द्वारा टिप्पणियों में सवाल का स्पष्ट रूप से उत्तर दिया गया है और आपने जवाब के लिए धन्यवाद दिया। नवंबर 2015 में आपने अचानक अपना जवाब दिया जो पिछली जानकारी (?) पूरी तरह से अनदेखा (और विरोधाभास) है। और अब, 2017 में, आप पूछ रहे हैं कि क्या कर्नेल मॉड्यूल में 'current' नामक कोई भी है ??? – AnT

संबंधित मुद्दे