Ancora Olicard 300 Modem 3G - "Second round!" UDEV

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3803
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Ancora Olicard 300 Modem 3G - "Second round!" UDEV

Messaggio da joe »

Dopo diversi esperimenti empirici e ricerche in rete sono riuscito a controllare il riconoscimento della chiavetta internet in oggetto.
La procedura è abbastanza facile anche se alcuni automatismi di sistema possono rendere le cose più complicate (vedi modem-manager).

Ecco la procedura:

1- inserimento della chiavetta
viene riconosciuta come un cosiddetto "ZeroCD" /dev/sr0 e da lsusb si ottiengono i seguenti vendor e product ids: 2020:0002

2- faciamo finta di espellere il cd con eject.

Codice: Seleziona tutto

eject /dev/sr0
adesso il "ProducID" è cambiato e lsusb ritorna: 2020:4000.

3- A questo punto diamo questi nuovi ID in pasto ad usbserial:

Codice: Seleziona tutto

modprobe usbserial vendor=0x2020 product=0x4000
Et voilà, il modem è servito e vengono create 3 o quattro file speciali tipo /dev/ttyUSB*
Su cui si può impostare la connessione dialup per esempio con pppd e chat, o wvdial o altro.

Benissimo!
Si può fare tutto a mano ma sarebbe preferibile automatizzare la procedura in modo che:

- Attacco la chiavetta e zac! Mi ritrovo il modem utilizzabile per esempio su /dev/ttyUSB0.

Per il momento ho fatto uno script, che automatizza semplicemente le operazioni da fare a mano:
- attacco la chiavetta
- lancio lo script
- ho il modem

Poi ho provato ad scriverere una regola udev:

Codice: Seleziona tutto

/etc/udev/rules.d/00-olicard_300.rules
Questa funziona se:
1- inserisco la chiavetta a sistema avviato, a caldo insomma
2- faccio il reboot del sistema (nel fare il reboot la chiavetta resta alimentata e non perde l'impostazione "modalità modem"

Non funziona se:
- Attacco la chiavetta e accendo il computer.
In questo caso la chiavetta viene inizialmente riconosciuta come CD e forse udev fa partire il mio script troppo presto fatto sta che alla fine del boot il device /dev/sr0 è ancora presente e lsusb dice ancora 2020:4000 cioè Zero-CD.
Ho il sospetto che sia un problema di tempistiche perchè a sistema avviato e con la chiavetta ancora vista come zero-cd, se dò:

Codice: Seleziona tutto

udevadm trigger
Ecco che il tutto funziona, ovverro la regola udev "vede" gli id dello zero-cd 2020:0002 e

Vi dovrei postare lo script e la regola udev. Le recupero sul netbook che ospita la chiavetta.

Codice: Seleziona tutto

#!/bin/sh

LOG=/tmp/olicard-300.log
LOCK=/var/lock/olicard.lk


modeswitch()
{
  echo "$(date +%m%d-%H.%M.%S): Switching Olicard 300 from ZeroCD to 3G Modem" > $LOG 
  echo "$(date +%m%d-%H.%M.%S) Step 1: eject SR0 device" >> $LOG
  echo ''  >> $LOG
  touch $LOCK
  while [ ! -e /dev/sr0 ]; do
    echo "$(date +%m%d-%H.%M.%S)         waiting for ZeroCD /dev/sr0"
    sleep 1
  done 
  /usr/bin/eject /dev/sr0
  rm $LOCK
}

modemup()
{
  while [ -e $LOCK ]
  do
    sleep 1
  done
  echo "$(date +%m%d-%H.%M.%S) Step 2: creating modem device /dev/ttyUSB*" >> $LOG
  /sbin/modprobe usbserial vendor=0x2020 product=0x4000
  echo '---------------' >> $LOG
}

case $1 in
  modeswitch)
             sleep 2
             modeswitch
             ;;
     modemup)
             sleep 2
             modemup
             ;;
           *)
             echo "Nothing to do!  Bye..."
             ;;
esac

Codice: Seleziona tutto

# All'inserimento della chiavetta espelli lo "ZeroCD"
#
ACTION=="add|change", SUBSYSTEM=="usb", ATTRS{idVendor}=="2020", ATTRS{idProduct}=="0002", RUN+="/usr/local/bin/olicard_300.sh modeswitch"

# Adesso lo switch sulla chiavetta e' effettuato e dovrebbe apparire come 2020:4000 da lsusb
# A questo punto basta caricare il modulo usbserial prendendo in consegna il device specifico
#
ACTION=="add|change", SUBSYSTEM=="usb", ATTRS{idVendor}=="2020", ATTRS{idProduct}=="4000", RUN+="/usr/local/bin/olicard_300.sh modemup"

Se avete qualche idea per capire cosa succede...
Non fate caso allo script raffazzonato ecc... sicuramente è una configurazione piuttosto provvisoria e fatta a tentoni e un po' di fretta.

Rispondi