2016-04-02 2 views
1

В настоящее время я пытаюсь скомпилировать ядро ​​для моей андроид устройства несчастливо я столкнулся с этой ошибкой компиляции и застрял с нимядро ​​с множественным Definiton ошибки функции

компилятор говорит:

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

в драйверах /dpram.c у меня есть:

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); 

и в драйверах/нетто/беспроводной/bcmdhd/bcmsdh_linux.c ı есть:

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; 
    } 

В настоящее время я пытаюсь понять это, но я не смог пока

ответ

1

вызвана ошибка, потому что

struct device *pm_dev; 

является определение в C. Он определяет указатель на структуру device и это имя pm_dev. Невозможно определить переменную более одного раза, поэтому вы должны объявить pm_dev как extern во всех других исходных файлах, но только в том, в каком вы его определяете.

декларация (ы):

extern struct device *pm_dev; 

Одно определение:

struct device *pm_dev; 
+0

так я должен проверить все источники и конвертировать все определения pm_dev (STRUCT устройство * pm_dev; -> ехЬегп структура устройства * pm_dev;) –

+0

yes, все, кроме одного, где он определен – 4pie0

+0

Alrigth I преобразовал значения pm_dev в файлы dpram.c и bcmsdh_linux.c, но теперь у меня получилась ошибка «неопределенная ссылка на pm_dev» в dpram.o –