Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Железо в Linux (http://forum.oszone.net/forumdisplay.php?f=29)
-   -   USB GPRS модем в Mandrake Linux 10.1 (http://forum.oszone.net/showthread.php?t=47137)

madcat 24-03-2005 20:03 309799

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 и что для этого необходимо сделать?
И можно ли автоматизировать процесс подгрузки модулей? (все предыдущие попытки, проведённые в соответствии с документацией провалились).
Заранее благодарен.

ruslandh 24-03-2005 21:37 309829

Может поменять порядок автоматической загрузки модулей ?
Ничего не могу сказать как, так-как не знаю ни какой дистрибутив, ни какие пакеты установлены.
В последних дистрибутивах загрузкой модулей USB обычно занимается hotplug (а в Сизифе, например, hotplug заменил kudzu и загружает и другие модули ядра).

madcat 24-03-2005 23:01 309851

Ядро 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

ruslandh 25-03-2005 01:30 309872

А что у Вас про usb в /etc/modules.conf ?

madcat 25-03-2005 01:38 309877

/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

К сожалению я еще не до конца уяснил (пожалуй слабо сказано) механику подключения модулей.

ruslandh 25-03-2005 08:43 309906

1
Цитата:

К сожалению я еще не до конца уяснил (пожалуй слабо сказано) механику подключения модулей.
это ещё усугубляется, что на сегодняшний день это механика от дистрибутива к дистрибутиву разнится :(
надо подробно изучать скрипты загрузки модулей ядра, в частности найти конфигурационные файлы и скрипты вашего hotplug (то, что вы привели - это явно скрипт, входящий в хотплуг, а похоже вам надо изменить конфигурационный файл )
2 можно попытаться обойти hotplug и прописать загрузку нужных вам модулей в нужном порядке в /etc/modules


madcat 26-03-2005 00:29 310168

Каким образом можно прописать эти модули?
Порядок, насколько я понимаю, должен быть следующим:
usbcore -> uhci-hcd -> cdc-acm -> usb-hid

ruslandh 26-03-2005 08:30 310209

1 по-моему usbcore прописывать не надо - он т так загрузится
2 порядок в /etc/modules - тот, в котором упоминаются в этом файле модули
Просто на каждой строке пишешь название одного модуля.

madcat 27-03-2005 21:46 310552

Я прописал в /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 попрежнему "вешает" систему).

ruslandh 28-03-2005 01:56 310593

Похоже у вас модули cdc-acm и usbhid конфликтуют ?

ruslandh 28-03-2005 01:57 310594

А попробуйти прописать cdc_acm

madcat 29-03-2005 00:02 310889

Не срабатывает. Вот фрагмент /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".

madcat 29-03-2005 00:53 310919

Создается такое впечатление, что этот злосчастный модуль (cdc-acm) нужно прописать где-то еще.
Например команда insmod прекрасно срабатывает с параметрами uhci-hcd и usbhid, но на параметр cdc-acm ругается - не найден файл. Приходится писать полный путь у cdc-acm.ko. И еще один момент: изначально модуль лежал в одноименном архиве(cdc-acm.ko.gz) и мне пришлось распаковывать его вручную. Возможно проблемма как раз в этом, а не в /etc/modules.

ruslandh 30-03-2005 00:25 311263

Так все модули ядра должны лежать внутри /lib/modules/ВЕРСИЯ_ЯДРА , и если он лежит не там, то отсюда и все проблемы.
Кроме того модель должен быть прописан в modules.dep, который лежит в этом каталоге.
Скоре всего вы не давали команду make install (если вы устанавливали его из тарбола) из-под root

madcat 31-03-2005 22:16 311818

Этот модуль из стандартного дистрибутива. И лежит он правильно - в /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

ruslandh 01-04-2005 07:24 311877

1 Насколько я знаю, часто вместо
insmod cdc-acm
(или modprobe cdc-acm)
надо применять
insmod cdc_acm
(хотя сам модуль называется cdc_acm)
2 И всё-таки правильнее копаться в парамeтрах работы hotplug - это его функция usb модули загружать, а он работвет через проверку файловой системы usbfs (которая должна существовать) - смотрю по скрипту /etc/hotplug/usb.rc
.

madcat 12-04-2005 23:37 315154

Удалось избавиться практически от всех проблемм:
Сначала стер модуль, распакованный из архива. После этого коректно заработала команда modprobe cdc-acm. Далее прописал в /etc/modprobe.preload строку "cdc-acm". Теперь если при загрузки ОС телефон подключен к компьютеру - коректно определяется модемное устройство /dev/ttyACM0. Если подключать устройство "на горячую" команда modprobe cdc-acm необходима. Теперь буду разбираться с настройкой горячего подключения. Спасибо за помощь!


Время: 00:43.

Время: 00:43.
© OSzone.net 2001-