ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: использование usbserial  (Прочитано 10875 раз)

0 Пользователей и 1 Гость просматривают эту тему.

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
использование usbserial
« : 15 Сентября, 2011, 00:52:22 »

Здравствуйте!
Я налаживаю связь тиона с USB-модемом (ОС Линукс). Не могу привязать USB модем к драйверу. Тион видит модем:
Цитировать
# lsusb
Bus 001 Device 007: ID 22b8:2d99 Motorola PCS
Bus 001 Device 001: ID 0000:0000 
Драйвер usbserial загружен
Цитировать
usbcore: registered new interface driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core
Но при подключении модема он не вызывает драйвер usbserial
Цитировать
usb 1-2: new full speed USB device using ep93xx-usb and address 3
usb 1-2: not running at top speed; connect to a high speed hub
usb 1-2: configuration #1 chosen from 1 choice
При попытке привязать драйвер к устройству, вижу такое:
Цитировать
# usbserial vendor=0x22b8 product=0x2b99
-sh: usbserial: not found

НО: если в исходниках драйвера в файле generic.c  прописать нужный вендор и продукт, пересобрать ядро и прошить, то модем определяется и я вижу долгожданное:
Цитировать
usbserial_generic 1-2:1.0: generic converter detected
usbserial_generic 1-2:1.0: Generic device with no bulk out, not allowed.
usbserial_generic: probe of 1-2:1.0 failed with error -5
usbserial_generic 1-2:1.1: generic converter detected
usb 1-2: generic converter now attached to ttyUSB0
usbserial_generic 1-2:1.2: generic converter detected
usb 1-2: generic converter now attached to ttyUSB1
usbserial_generic 1-2:1.3: generic converter detected
usb 1-2: generic converter now attached to ttyUSB2

Вопрос: как динамически подключать драйвер usbserial к нужному мне устройству с нужными вендором и продуктом ID?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: использование usbserial
« Ответ #1 : 15 Сентября, 2011, 23:41:00 »

Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: использование usbserial
« Ответ #2 : 16 Сентября, 2011, 00:34:23 »

я уже это пробовал. Не работает:
Цитировать
# modprobe usbserial vendor=0x22b8 product=0x2d99
modprobe: chdir(2.6.20.21): No such file or directory
такое ощущение, что modprobe работает как то криво. Причем chdir(2.6.20.21)?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: использование usbserial
« Ответ #3 : 16 Сентября, 2011, 13:25:46 »

modprobe работает как и должен. Если вы по какой-то причине не можете предоставить ему требуемые файлы/директории, используйте insmod.

http://zao-zeo.ru/dokuwiki/doku.php/linux#модули_ядра
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: использование usbserial
« Ответ #4 : 17 Сентября, 2011, 01:33:34 »

по поводу модулей понятно. modprobe не мог их найти в папке /lib/modules/версия ядра. И если бы usbserial был бы модулем, то надо было бы посемтить его в указанную папку и все было бы хорошо. Но usbserial не является модулем. Он является компонентов ядра. Более того, когда конфигурируется ядро перед компиляцией, компонент Device Drivers->USB support->USB serial converter support->USB generic serial driver даже нельзя сделать модулем. Он либо отключен, либо включается в состав ядра. Что делать в этом случае? Как сказать линуксу, что надо использовать драйвер usbserial для устройства с  нужными vendor и product? команда usbserial vendor=0xXXXX product=0xXXXX не выполняется
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: использование usbserial
« Ответ #5 : 17 Сентября, 2011, 13:52:28 »

<linux-src>/Documentation/kernel-parameters.txt
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: использование usbserial
« Ответ #6 : 17 Сентября, 2011, 18:48:00 »

в этом документе написано
Цитировать
Module parameters for modules that are built into the kernel image
are specified on the kernel command line with the module name plus
'.' plus parameter name, with '=' and value if appropriate, such as:

   usbcore.blinkenlights=1
Но c usbserial это не проходит.
Цитировать
# usbserial.vendor=0x22b8                                                                                                               
-sh: usbserial.vendor=0x22b8: not found                                                                                                 
Больше ничего полезного в этом документе по usbserial я не нашел. Там описаны параметры ядра, но ничего относящегося к моему драйверу я не нашел.
В инете пишут, что привязать драйвер можно выполнив команду
Цитировать
echo -n "1-1:1.0" > /sys/bus/usb/drivers/usbserial/bind
, где надо подставить номер USB устройства.
У меня эта команда выполняется, но ничего не происходит.

Все-таки смог вынести usbserial  в отдельный модуль. Пересобрал ядро, скопировал в папку /lib/modules/ полученные модули. Выполняю
Цитировать
# modprobe usbserial vendor=0x22b8 product=2d99                                                                                         
usbserial: unknown relocation: 40                                                                                                       
modprobe: failed to load module usbserial: invalid module format                                                                         
Где то прочитал, что в конфигурации ядра надо установить параметр CONFIG_MODVERSIONS. Установил. Пересобрал ядро, заменил модули. Но реакция на modprobe такая же. insmod так же не хочет работать:
Цитировать
# insmod usbserial.ko vendor=0x22b8 product=0x2d99                                                                                       
usbserial: unknown relocation: 40                                                                                                       
insmod: can't insert 'usbserial.ko': invalid module format                                                                               
В чем проблема? Что это за ошибка?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: использование usbserial
« Ответ #7 : 18 Сентября, 2011, 12:21:18 »

> -sh: usbserial.vendor=0x22b8: not found

Это не имеет отношения к консоли.

> Там описаны параметры ядра

Именно и если драйвер не собран модулем, то его параметры указываются в параметрах ядра. Где указываются параметры ядра?

> insmod: can't insert 'usbserial.ko': invalid module format

Видимо ядро или модуль не одного типа OBI/EABI.
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: использование usbserial
« Ответ #8 : 18 Сентября, 2011, 15:42:40 »

в инете описывают несколько вариантов сметы параметров ядра. Как правило все они работают с папкой /proc
1. Использование sysctl. Я так понял, что надо выполнить что то вроде
Цитировать
# sysctl -w usbserial.vendor=0x22b8                                                                                             
sysctl: error: 'usbserial.vendor' is an unknown key                                                                             
Команда sysctl -a выдает список, в котором нет ничего про USB

2. Теоретически в папке /proc/sys/kernel должен быть файл usbserial, который конфигурирует этот параметр. Но в этой папаке файлов совсем не много и usbserial там нет

3. Заслать значение параметра в определенный файл в папке /proc/
В папаке /proc я нашел только один файл, имеющий отнгошение к usbserial. Это /proc/tty/driver/usbserial
Я пытался отправить в него что то вроде
Цитировать
echo "vendor=0x22b8"
Но ничего не происходило. Потом заметил, что файл usbserial доступен только для чтения

Где то я не там ищу?


>Видимо ядро или модуль не одного типа OBI/EABI.
Но собираются то они вместе. Модули собираются вместе с ядром, потом переносятся в папку ./lib/modules. Как они могут быть не одного типа?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: использование usbserial
« Ответ #9 : 18 Сентября, 2011, 16:27:10 »

Я знаю только такой вариант:
 http://zao-zeo.ru/dokuwiki/doku.php/u-boot#параметры_ядра


> собираются то они вместе

И вы перезаписываете на Тионе полученное при этом ядро?
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: использование usbserial
« Ответ #10 : 18 Сентября, 2011, 19:47:28 »

Да, по вашему способу получилось.
То есть в загрузчике поменял значение bootargs c
setenv bootargs 'console=ttyAM0,57600n8 root=/dev/mtdblock2 rootfstype=jffs2'
на
setenv bootargs 'console=ttyAM0,57600n8 root=/dev/mtdblock2 rootfstype=jffs2 usbserial.vendor=0x22b8 usbserial.product=0x2d99'

И драйвер, собранный в составе ядра заработал с моим устройством.

По поводу модулей остается не понятно. Модули и ядро я собирал одновременно, перепрошивал ядро и копировал модули в папку /lib/modules, но при этом при загрузке модуля выскакивала ошибка "invalid module format". Было бы неплохо с этим разобраться, так как в случае если несколько устройств потребуют драйвер usbserial, фокус с bootargs может не прокатить.
Записан