Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не загружаются модули в 3.2.32
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
alx2
Пытаюсь в ядро 3.2.32 загрузить модуль g_serial. Получаю странную ошибку:
Код
root@sw01:~# modprobe g_serial
modprobe: can't load module g_serial (kernel/drivers/usb/gadget/g_serial.ko): No such device

И модуль не загружается. insmod дает ту же ошибку. Аналогично ведут себя другие модули (пробовал несколько разных), подозреваю что все.
При попытке вкомпилировать g_serial в ядро статически ядро грузится, но никаких упоминаний g_serial в его выводе нет. Соответствующего устройства в /dev тоже не появляется.
В ядро 3.0.47 с тем же конфигом, модули загружаются нормально.
В чем проблема?

Процессор Atmel at91sam9g20, конфиг ядра тут: http://pastebin.com/hZbVrfRS
kurtis
Можно посмотреть какой errno соответствует сообщению "No such device". Это похоже на то, что драйвер возвращает ENODEV. Если посмотреть в исходнике drivers/usb/gadget/serial.c, том вызывает ряд функций и подобный результат может возникать в drivers/usb/gadget/udc-core.c

Код
322         mutex_lock(&udc_lock);
323         list_for_each_entry(udc, &udc_list, list) {
324                 /* For now we take the first one */
325                 if (!udc->driver)
326                         goto found;
327         }
328
329         pr_debug("couldn't find an available UDC\n");
330         mutex_unlock(&udc_lock);
331         return -ENODEV;


Цитата
При попытке вкомпилировать g_serial в ядро статически ядро грузится, но никаких упоминаний g_serial в его выводе нет

Можно загрузить ядро с параметром initcall_debug и посмотреть вызывается ли соответствующая init функция.

Может между версиями ядра есть значительные изменения в arch/arm/mach-at91/* ?
alx2
Цитата(kurtis @ Oct 22 2012, 14:32) *
Можно посмотреть какой errno соответствует сообщению "No such device". Это похоже на то, что драйвер возвращает ENODEV.
Да, именно так.

Цитата(kurtis @ Oct 22 2012, 14:32) *
Если посмотреть в исходнике drivers/usb/gadget/serial.c, том вызывает ряд функций и подобный результат может возникать в drivers/usb/gadget/udc-core.c
Если не найден (не зарегистрирован) UDC. Не представляю, почему он может быть не найден...

За совет использовать initcall_debug спасибо, попробую как будет время.
kurtis
Судя по конфигу, у вас CONFIG_USB_AT91 собирается как модуль, может попробовать включить в ядро?
У вас udc_init_module() вызывается? И с каким кодов завершается?
alx2
Цитата(kurtis @ Oct 22 2012, 14:32) *
Если посмотреть в исходнике drivers/usb/gadget/serial.c

Все, разобрался. Проблема была именно тут.
По непонятным мне причинам в конфиге ядра, который я ему подсовывал, "CONFIG_USB_AT91=y" заменялось на "CONFIG_USB_AT91=m". В результате, действительно, никакого UDC не было. sm.gif
Исправил эту строчку обратно - все заработало. Спасибо за подсказку.


Вы меня опередили. sm.gif sm.gif sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.