2012-04-20 166 views
4

我是學習如何編寫USB設備的Linux設備驅動程序的新手。編譯我的代碼時出現錯誤。評論欄中有一個問題。我想提出一個模塊的USB驅動器如下:簡單的USB驅動程序

#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/usb.h> 

static int pen_probe(struct usb_interface *intf,const struct usb_device_id *id) 
{ 
    printk(KERN_ALERT"\nthe probe is successful"); 
    return 0; 
} 

static void pen_disconnect(struct usb_interface *intf) 
{ 
    printk(KERN_ALERT"pen drive removed"); 
} 

const struct usb_device_id pen_table = { 
    USB_DEVICE(0x058f,0x6387), 
}; 

MODULE_DEVICE_TABLE(usb,pen_table); 

static struct usb_driver pen_driver = { 
    .name = "pen_driver", 
    .id_table = pen_table, // error coming at this line 
    .probe = pen_probe, 
    .disconnect = pen_disconnect, 
}; 

static int __init pen_init(void) 
{ 
    int ret; 
    ret = usb_register(&pen_driver); 
    printk(KERN_ALERT"THE RET::%d\n",ret); 
    return 0; 
} 

static void __exit pen_exit(void) 
{ 
    usb_deregister(&pen_driver); 
} 

module_init(pen_init); 
module_exit(pen_exit); 

MODULE_LICENSE("GPL"); 

它給我一個錯誤如下:結構

:26:5: error: initializer element is not constant 

    /home/karan/practice/usb/usb1.c:26:5: error: (near initialization for ‘pen_driver.id_table’) 

回答

3

id_table成員是類型const struct usb_device_id *,但你要分配const struct usb_device_id。嘗試在結構初始化中更改pen_table&pen_table
希望這有助於!
編輯:它實際上看起來像你有pen_table聲明不正確。它可能應該是:

const struct usb_device_id pen_table[] = { 
    {USB_DEVICE(0x058f,0x6387)}, 
    {} 
}; 

和初始化應該是pen_table(而不是&pen_table如先前建議的),你在你的代碼已經完成。

+0

Greg Kroah-Hartman寫的drivers/usb/usb-skeleton.c can被引用的細節。 – Jayzcode 2015-08-15 18:56:21

-1
obj-m +=usbDemo1.o 

KVERSION = $(shell uname -r) 
all: 
     make -C/lib/modules/$(KVERSION)/build M=$(PWD) modules 
clean: 
     make -C/lib/modules/$(KVERSION)/build M=$(PWD) clean 
+3

一些解釋會有所幫助 – PaulG 2012-11-10 12:43:04

0
#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/usb.h> 

static int pen_probe(struct usb_interface *interface, const struct usb_device_id *id) 
{ 
printk(KERN_INFO "Pen drive (%04X:%04X) plugged\n", id->idVendor, id->idProduct); 
return 0; 
} 

static void pen_disconnect(struct usb_interface *interface) 
{ 
printk(KERN_INFO "Pen drive removed\n"); 
} 

static struct usb_device_id pen_table[] = 
{ 
{ USB_DEVICE(0x058F, 0x6387) }, 
{} /* Terminating entry */ 
}; 
MODULE_DEVICE_TABLE (usb, pen_table); 

    static struct usb_driver pen_driver = 
    { 
.name = "pen_driver", 
.id_table = pen_table, 
.probe = pen_probe, 
.disconnect = pen_disconnect, 
}; 

    static int __init pen_init(void) 
{ 
return usb_register(&pen_driver); 
    } 

static void __exit pen_exit(void) 
    { 
usb_deregister(&pen_driver); 
    } 

    module_init(pen_init); 
    module_exit(pen_exit); 
+0

歡迎來到SO,在這裏,解釋爲什麼要使用您的解決方案而不僅僅是如何解決這個問題是一個好習慣。這會讓你的回答更有價值,並有助於讀者更好地理解你是如何做到的。我還建議你看看我們的FAQ:http://stackoverflow.com/faq。 – ForceMagic 2012-11-10 12:45:32

-2

OBJ-M + = usbDemo1.o

KVERSION = $(殼UNAME -r) 所有: 化妝-C/LIB /模塊/ $(KVERSION)/構建中號= $(PWD)模塊 clean: make -C/lib/modules/$(KVERSION)/ build M = $(PWD)clean