ЗАО «ЗЭО»
Техническая поддержка пользователей => ОС Linux, U-Boot => Тема начата: oev от 17 Сентября, 2014, 16:45:23
-
Доброго всем времени суток!
У меня есть ядро Linux 2.6.22 собранное лет 5 назад, имеется его дистрибутив. Задача такова, что на нем необходимо поднять одновременно USB-host ( вложен в ядро ) при уже существующем USB-device ( подключается модульно ).
Если добавить USB-хост через menuconfig -> вылезает ошибкаdrivers/usb/core/usb.c: На верхнем уровне:
drivers/usb/core/usb.c:772:5: ошибка: несовместимые типы для «usb_buffer_map_sg»
In file included from drivers/usb/core/usb.c:34:0:
include/linux/usb.h:1536:5: замечание: здесь была предыдущая декларация «usb_buffer_map_sg»
drivers/usb/core/usb.c:833:6: ошибка: несовместимые типы для «usb_buffer_unmap_sg»
In file included from drivers/usb/core/usb.c:34:0:
include/linux/usb.h:1542:6: замечание: здесь была предыдущая декларация «usb_buffer_unmap_sg»
drivers/usb/core/usb.c:976:1: ошибка: несовместимые типы для «usb_buffer_map_sg»
In file included from drivers/usb/core/usb.c:34:0:
include/linux/usb.h:1536:5: замечание: здесь была предыдущая декларация «usb_buffer_map_sg»
drivers/usb/core/usb.c:980:1: ошибка: несовместимые типы для «usb_buffer_unmap_sg»
In file included from drivers/usb/core/usb.c:34:0:
include/linux/usb.h:1542:6: замечание: здесь была предыдущая декларация «usb_buffer_unmap_sg»
Тема наверно совсем неактуальна, потому что в ядре 2.6.35... от zao-zeo все хорошо работает. Но нужно поднять хост именно на дистрибутиве 2.6.22.
Кто знает из старожил, реализуема ли эта задача? если да, то какие существуют хитрости?
Заранее спасибо!
-
Вот на эту тему:
https://groups.google.com/d/topic/tion_sbc/oDPOJ_jdyDM/discussion
-
Полезная ссылочка, спасибо! Тем не менее, не могли бы вы дать, пожалуйста, готовые патчи к ядру. Это сэкономило бы мне уйму времени
-
> готовые патчи к ядру
Только те, которые там.
-
Вдоволь наевшись с исходниками моего дистрибутива, мне удалось собрать образ линукса.
У меня появилась папочка /proc/bus/usb , правда в ней ничего нет.
при подключении usb-устройства (например usb-мышка), однократно моргает ее светодиод, и все.
Никакого устройства в вышеуказанной папке не образуется
Подскажите пожалуйста, в каком направлении копать
-
usfbs примонтирована?
В /etc/fstab
none /proc/bus/usb usbfs defaults,devmode=0666 0 0
-
Нет, не примонтирована! Спасибо, переделаю!
-
Учтите, что usbfs должна быть включена при сборке ядра.
-
В ядро я добавил почти все что можно было. Когда usbfs примонтировалась, то появились /proc/bus/usb/devices и папка /proc/bus/usb/001.
Лог при загрузке ядра говорит, что все хорошо, hub настроен, есть 3 порта.
Но проблема так и осталась, питание на девайс идет кратковременно. В ..../devices подключенное устройство не отображается
-
В общем создается впечатление, что хост ( т.е. тион ) при подключении устройства не считывает с него даже дескриптор. В /proc/bus/usb/devices помимо хаба ничего нет.
Автоопрос шины заложен в ядре или он вызывается скриптом из фс?
В данной версии ядра не запускается lsusb(его просто нет), так и должно быть?
-
# uname -a
Linux tion270 2.6.22.19 #1 Mon Apr 2 14:02:56 MSK 2012 armv5tel GNU/Linux
# lsusb
Bus 001 Device 001: ID 0000:0000
dmesg | grep Tion
[ 0.000000] Machine: Tion-Pro270 Board
-
Я не знаю, будет текст ниже интересен кому-то или нет, опишу как я поднял одновременно USB хост и клиент на своем дистрибутиве 2.6.22.9:
1)при добавлении USB-хост через menuconfig, вылезали ошибки при компиляции. Моя проблема была в том, что патч от zao-zeo для версии 2.6.22 встал криво на существующую версию. Виновника торжества я нашел в /include/usb/usb.h.
Заменил его на нужный. Сборка прошла, хост поднялся, клиент отвалился.
2)В ./arch/arm/mach-pxa/colibri.c указаны начальные настройки всей периферии. Что включено, а что нет. Мой USB-клиент всегда был выключен. Как оно раньше работало — для меня тайна. В старой версии клиент подключался
модульно, и похоже, ветвь ядра, отвечающая вообще за USB отсутствовала, поэтому конфликтов и не было. Почитав
https://groups.google.com/d/topic/tion_sbc/oDPOJ_jdyDM/discussion , я сделал так, чтобы у меня были постоянно и клиент и хост. OTG мне не нужен.
Теперь загрузка ядра проходит успешно, все инициализируется, но как раньше ( когда был только клиент ) связи с ПК нет
3) Находим виновника. При поднятии хоста поменялся major number у USB клиента. Смотрим, чтоу нас в /proc/devices. А потом, что выдаст 'ls-l /dev'. Через 'mknod' связываем периферию ядра с КФС. И наконец-таки все работает.