2016-04-02 7 views
1

ich derzeit versuche Kernel für mein Android-Gerät zu kompilieren unfortunatly ich mit dieser Compilation Fehler konfrontiert und mit ihm steckenKernel c mehrere Definiton von Funktionsfehler

Compiler sagt:

drivers/dpram/built-in.o:(.bss+0x2815c): multiple definition of `pm_dev' 
drivers/net/built-in.o:(.bss+0x1ac4): first defined here 

in Treiber /dpram.c ICH hABE:

struct device *pm_dev; 

    pm_dev = device_create(sec_class, NULL, 0, NULL, "pm"); 
    if(IS_ERR(pm_dev)) 
     pr_err("Failed to create device(pm)!\n"); 
    if(device_create_file(pm_dev, &dev_attr_info) < 0) 
     pr_err("Failed to create device file(%s)!\n", dev_attr_info.attr.name); 
    if(device_create_file(pm_dev, &dev_attr_power_down) < 0) 
     pr_err("Failed to create device file(%s)!\n", dev_attr_power_down.attr.name); 

und in drivers/net/wireless/bcmdhd/bcmsdh_linux.c Ich habe:

struct device *pm_dev; 

    if (!device_init_wakeup(dev, 1)) 
     pm_dev = dev; 

    if (pm_dev) { 
     device_init_wakeup(pm_dev, 0); 
     pm_dev = NULL; 
    } 

ich zur Zeit versucht, es herauszufinden, aber ich könnte nicht noch

Antwort

1

Der Fehler wird verursacht, weil

struct device *pm_dev; 

eine Definition ist in C. Es definiert einen Zeiger device zu strukturieren und es heißt pm_dev. Es ist nicht erlaubt, Variablen mehr als einmal zu definieren, daher sollten Sie pm_dev als extern in allen anderen Quelldateien deklarieren, aber nur in einer, in der Sie sie definieren.

Erklärung (en):

extern struct device *pm_dev; 

Einzel Definition:

struct device *pm_dev; 
+0

so sollte ich überprüfen alle Quelle und konvertieren alle pm_dev Definitionen (struct Gerät * pm_dev; -> extern struct Gerät * pm_dev;) –

+0

ja, alles außer einem, wo es definiert ist – 4pie0

+0

Alrigth ich konvertierte pm_dev Definitionen in beiden dpram.c und bcmsdh_linux.c Dateien, aber jetzt habe ich "Undefined reference to pm_dev" Fehler in dpram.o –

Verwandte Themen