2013-04-10 11 views
9

के साथ काम नहीं कर रहा है, मुझे अपने पुराने kernel मॉड्यूल को संकलित करते समय संकलक त्रुटि मिल रही है जो नेटलिंक फ़ंक्शंस का उपयोग कर रहा है।netlink_kernel_create नवीनतम लिनक्स कर्नेल

int 
init_module() 
{ 
    /* Initialize the Netlink kernel interface */ 
    nl_sk = netlink_kernel_create(&init_net, 17, 0, recv_cmd, NULL, THIS_MODULE); 
    if(!nl_sk) 
    { 
      printk(KERN_INFO "failed to initialize system (error: 1001)\n"); 
      return -ENOMEM; 
    } 
.... 

पहले यह ठीक काम करता है लेकिन अब मुझे यह त्रुटि मिल रही है।

error: too many arguments to function 'netlink_kernel_create' 

ओएस सूचना

uname -a 

Linux ibrar-ahmed 3.8.0-17-generiC#27-Ubuntu SMP Sun Apr 7 19:39:35 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

उत्तर

11

बस निम्नलिखित

struct netlink_kernel_cfg cfg = { 
    .input = recv_cmd, 
}; 

nl_sk = netlink_kernel_create(&init_net, 17, &cfg); 

साथ

nl_sk = netlink_kernel_create(&init_net, 17, 0, recv_cmd, NULL, THIS_MODULE); 

की जगह है और यह काम करना चाहिए। मैं एक ही समस्या में भाग गया।

+0

आपको बहुत धन्यवाद, दोस्त, इससे मुझे बहुत मदद मिली! –

6

क्योंकि 3.8 में netlink_kernel_create प्रोटोटाइप बदल दिया गया है है कि:

netlink_kernel_create (struct शुद्ध * शुद्ध, पूर्णांक इकाई, struct netlink_kernel_cfg * cfg)

(और qv http://lxr.linux.no/linux+v3.8/include/linux/netlink.h#L48)

आपके पास कर्नेल मॉड्यूल को फिर से लिखने के अलावा कोई विकल्प नहीं है, और उस अतिरिक्त तर्क (THIS_MODULE) को हटाएं, साथ ही netlink_kernel_cfg संरचना को कार्यान्वित करें।

+1

क्या कोई उदाहरण उपलब्ध है? –

+1

ऐसे नए कर्नेल के साथ, शायद नहीं। हालांकि यह नए एपीआई के लिए समायोजित करने के लिए आपके कार्यान्वयन को संशोधित करने के लिए एक काफी सीधी प्रक्रिया होनी चाहिए। दुर्भाग्यवश, यह कुछ ऐसा है जो हमें अतीत में भी निपटना पड़ा था, साथ ही (जैसा कि लिनक्स कर्नेल एपीआई विकसित हो रहा है, और अक्सर काफी अस्थिर) – Technologeeks

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