![]() |
USB GPRS модем в Mandrake Linux 10.1
У меня телефон Motorola C350.
Я нашел скрипты для соединения с помощью pppd. Проблема состоит в следующем: При загрузке к ядру подключаются модули usbcore, uhci-hcd и usb-hid. Я в ручную подгружаю cdc-acm после чего в /var/log/messages появляется: Mar 24 18:59:48 localhost kernel: usb 1-1: new full speed USB device using address 3 Mar 24 18:59:49 localhost kernel: usb 1-1: device not accepting address 3, error -71 Mar 24 18:59:49 localhost kernel: usb 1-1: new full speed USB device using address 4 Mar 24 18:59:49 localhost kernel: usb 1-1: device not accepting address 4, error -71 Приходится вручную выгружать uhci-hcd, usb-hid и cdc-acm (rmmod) и подгружать обратно uhci-hcd и cdc-acm. После этого: Mar 24 19:01:25 localhost kernel: usb 1-1: new full speed USB device using address 5 Mar 24 19:01:25 localhost kernel: usb 1-1: device not accepting address 5, error -71 Mar 24 19:01:25 localhost kernel: usb 1-1: new full speed USB device using address 6 Mar 24 19:01:25 localhost kernel: drivers/usb/class/cdc-acm.c: Ignoring extra header Mar 24 19:01:25 localhost kernel: cdc_acm 1-1:1.0: ttyACM0: USB ACM device Вопрос заключается в следующем: можно ли использовать совместно usb-hid (у меня USB мышь) и cdc-acm и что для этого необходимо сделать? И можно ли автоматизировать процесс подгрузки модулей? (все предыдущие попытки, проведённые в соответствии с документацией провалились). Заранее благодарен. |
Может поменять порядок автоматической загрузки модулей ?
Ничего не могу сказать как, так-как не знаю ни какой дистрибутив, ни какие пакеты установлены. В последних дистрибутивах загрузкой модулей USB обычно занимается hotplug (а в Сизифе, например, hotplug заменил kudzu и загружает и другие модули ядра). |
Ядро 2.6.8.1 (ядро я не трогал)
Дистрибутив Mandrake Linux 10.1 Comunity DVD (по-моему так пишется) kudzu у меня нет (встречал его в ASPLinux 9.2) Зато есть hotplug Вот его конфиг(/etc/hotplug.d/default/default.hotplug): exec < /dev/null test -t 1 || exec > /dev/null test -t 2 || exec 2>&1 cd /etc/hotplug . ./hotplug.functions debug_mesg "arguments ($*) env (`env`)" if [ $# -lt 1 -o "$1" = "help" -o "$1" = "--help" ]; then if [ -t ]; then echo "Usage: $0 AgentName [AgentArguments]" AGENTS="" for AGENT in /etc/hotplug/*.agent ; do TYPE=`basename $AGENT | sed s/.agent//` if [ -x $AGENT ]; then AGENTS="$AGENTS $TYPE" else AGENTS="$AGENTS ($TYPE)" fi done echo "AgentName values on this system: $AGENTS" else mesg "illegal usage $*" fi exit 1 fi AGENT=/etc/hotplug/$1.agent if [ -x $AGENT ]; then shift if [ "$DEBUG" != "" ]; then mesg "invoke $AGENT ($@)" fi exec $AGENT "$@" mesg "couldn't exec $AGENT" exit 1 fi debug_mesg "no runnable $AGENT is installed" LOG=/var/log/hotplug/$1.events if [ ! -w $LOG ]; then # catch-all for unclaimed events LOG=/var/log/hotplug/events fi if [ -w $LOG ]; then # record all basic event data HOTPLUG_TYPE=$1 shift HOTPLUG_ARGS="$*" export HOTPLUG_ARGS HOTPLUG_TYPE # use to tempfile to buffer events # FIXME buffering acts oddly when logging to pipes, # it'd be better not to need a tempfile TMP=$(mktemp /var/log/hotplug/e-$HOTPLUG_TYPE-XXXXXXXX) if [ $? -ne 0 ]; then mesg "couldn't create tempfile for logging" exit 1 fi debug_mesg "log to $LOG ($HOTPLUG_TYPE $HOTPLUG_ARGS)" log_to_stdout > $TMP cat $TMP >> $LOG rm -f $TMP exit 0 fi exit 1 |
А что у Вас про usb в /etc/modules.conf ?
|
/etc/modules.conf пуст.
А в /etc/modprobe.conf только это: remove snd-via82xx /sbin/modprobe -r snd-pcm-oss; /sbin/modprobe --first-time -r --ignore-remove snd-via82xx install snd-via82xx /sbin/modprobe --first-time --ignore-install snd-via82xx && { /sbin/modprobe snd-pcm-oss; /bin/true; } alias sound-slot-0 snd-via82xx К сожалению я еще не до конца уяснил (пожалуй слабо сказано) механику подключения модулей. |
1
Цитата:
надо подробно изучать скрипты загрузки модулей ядра, в частности найти конфигурационные файлы и скрипты вашего hotplug (то, что вы привели - это явно скрипт, входящий в хотплуг, а похоже вам надо изменить конфигурационный файл ) 2 можно попытаться обойти hotplug и прописать загрузку нужных вам модулей в нужном порядке в /etc/modules |
Каким образом можно прописать эти модули?
Порядок, насколько я понимаю, должен быть следующим: usbcore -> uhci-hcd -> cdc-acm -> usb-hid |
1 по-моему usbcore прописывать не надо - он т так загрузится
2 порядок в /etc/modules - тот, в котором упоминаются в этом файле модули Просто на каждой строке пишешь название одного модуля. |
Я прописал в /etc/modules следующее:
uhci-hcd cdc-acm //По задумке после этого модем должен отобразится в /dev/ttyACM0 usbhid usbmouse saa7134 //Тюнер Модуль cdc-acm автоматически не подгружается. Команда insmod cdc-acm не работает - приходится прописывать полный путь к cdc-acm.ko. В случае разрыва соединения система отказывается конектиться заново (modem is not ready). При этом если попытсяться переподключить модуль cdc-acm любая из команд insmod и modeprobe приводит к "глухому" зависанию системы. Если же перевесить мышь с USB на PS/2 - отключается колесо (не подходит не один PS/2 драйвер). Зато оборванное соединение можно восстановить выгрузкой и повторной подгрузкой uhci-hcd и cdc-acm (командой insmod т.к. modeprobe попрежнему "вешает" систему). |
Похоже у вас модули cdc-acm и usbhid конфликтуют ?
|
А попробуйти прописать cdc_acm
|
Не срабатывает. Вот фрагмент /var/log/message во время загрузки:
Mar 28 22:47:47 localhost kernel: usbcore: registered new driver usbfs Mar 28 22:47:47 localhost kernel: usbcore: registered new driver hub Mar 28 22:47:47 localhost kernel: USB Universal Host Controller Interface driver v2.2 Mar 28 22:47:47 localhost kernel: uhci_hcd 0000:00:11.2: UHCI Host Controller Mar 28 22:47:47 localhost kernel: uhci_hcd 0000:00:11.2: irq 21, io base 0000e800 Mar 28 22:47:47 localhost kernel: uhci_hcd 0000:00:11.2: new USB bus registered, assigned bus number 1 Mar 28 22:47:47 localhost kernel: hub 1-0:1.0: USB hub found Mar 28 22:47:47 localhost kernel: hub 1-0:1.0: 2 ports detected Mar 28 22:47:47 localhost kernel: uhci_hcd 0000:00:11.3: UHCI Host Controller Mar 28 22:47:47 localhost kernel: uhci_hcd 0000:00:11.3: irq 21, io base 0000e400 Mar 28 22:47:47 localhost kernel: uhci_hcd 0000:00:11.3: new USB bus registered, assigned bus number 2 Mar 28 22:47:47 localhost kernel: hub 2-0:1.0: USB hub found Mar 28 22:47:47 localhost kernel: hub 2-0:1.0: 2 ports detected Mar 28 22:47:47 localhost kernel: usb 1-1: new full speed USB device using address 2 Mar 28 22:47:47 localhost kernel: usb 1-2: new low speed USB device using address 3 Дальше идет загрузка модулей тв-тюнера saa7130 после команды insmod /lib/modules/.../class/cdc-acm.ko: Mar 28 23:53:47 localhost kernel: usb 1-1: USB disconnect, address 2 Mar 28 23:53:50 localhost kernel: usb 1-1: new full speed USB device using address 4 Mar 28 23:53:54 localhost kernel: drivers/usb/class/cdc-acm.c: Ignoring extra header Mar 28 23:53:54 localhost kernel: cdc_acm 1-1:1.0: ttyACM0: USB ACM device Mar 28 23:53:54 localhost kernel: usbcore: registered new driver cdc_acm Mar 28 23:53:54 localhost kernel: drivers/usb/class/cdc-acm.c: v0.23:USB Abstract Control Model driver for USB modems and ISDN adapters А конфликт возникает если попробовать перегрузить модуль cdc-acm после дисконекта. Если этого не сделать - "Modem not ready". |
Создается такое впечатление, что этот злосчастный модуль (cdc-acm) нужно прописать где-то еще.
Например команда insmod прекрасно срабатывает с параметрами uhci-hcd и usbhid, но на параметр cdc-acm ругается - не найден файл. Приходится писать полный путь у cdc-acm.ko. И еще один момент: изначально модуль лежал в одноименном архиве(cdc-acm.ko.gz) и мне пришлось распаковывать его вручную. Возможно проблемма как раз в этом, а не в /etc/modules. |
Так все модули ядра должны лежать внутри /lib/modules/ВЕРСИЯ_ЯДРА , и если он лежит не там, то отсюда и все проблемы.
Кроме того модель должен быть прописан в modules.dep, который лежит в этом каталоге. Скоре всего вы не давали команду make install (если вы устанавливали его из тарбола) из-под root |
Этот модуль из стандартного дистрибутива. И лежит он правильно - в /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/class
В /lib/modules/2.6.8.1-10mdk/modules.dep он прописан как и остральные: /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/class/usblp.ko.gz: /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/core/usbcore.ko.gz /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/class/usb-midi.ko.gz: /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/core/usbcore.ko.gz /lib/modules/2.6.8.1-10mdk/kernel/sound/soundcore.ko.gz /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/class/cdc-acm.ko.gz: /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/core/usbcore.ko.gz и т.д. Команда modinfo cdc-acm возвращает: filename: /lib/modules/2.6.8.1-10mdk/kernel/drivers/usb/class/cdc-acm.ko.gz author: Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik description: USB Abstract Control Model driver for USB modems and ISDN adapters license: GPL vermagic: 2.6.8.1-10mdk 686 gcc-3.4 depends: usbcore alias: usb:v*p*dl*dh*dc*dsc*dp*ic02isc02ip00* alias: usb:v*p*dl*dh*dc*dsc*dp*ic02isc02ip01* alias: usb:v*p*dl*dh*dc*dsc*dp*ic02isc02ip02* alias: usb:v*p*dl*dh*dc*dsc*dp*ic02isc02ip03* alias: usb:v*p*dl*dh*dc*dsc*dp*ic02isc02ip04* alias: usb:v*p*dl*dh*dc*dsc*dp*ic02isc02ip05* alias: usb:v*p*dl*dh*dc*dsc*dp*ic02isc02ip06* А команда insmod cdc-acm : insmod: can't read 'cdc-acm': No such file or directory В то же время insmod uhci-hcd работает нормально... Для того, чтобы подгружать его в ручную мне пришлось распаковать cdc-acm.ko.gz в тот же каталог, что и архив и указывать полное имя cdc-acm.ko для команды insmod |
1 Насколько я знаю, часто вместо
insmod cdc-acm (или modprobe cdc-acm) надо применять insmod cdc_acm (хотя сам модуль называется cdc_acm) 2 И всё-таки правильнее копаться в парамeтрах работы hotplug - это его функция usb модули загружать, а он работвет через проверку файловой системы usbfs (которая должна существовать) - смотрю по скрипту /etc/hotplug/usb.rc . |
Удалось избавиться практически от всех проблемм:
Сначала стер модуль, распакованный из архива. После этого коректно заработала команда modprobe cdc-acm. Далее прописал в /etc/modprobe.preload строку "cdc-acm". Теперь если при загрузки ОС телефон подключен к компьютеру - коректно определяется модемное устройство /dev/ttyACM0. Если подключать устройство "на горячую" команда modprobe cdc-acm необходима. Теперь буду разбираться с настройкой горячего подключения. Спасибо за помощь! |
Время: 00:43. |
Время: 00:43.
© OSzone.net 2001-