Newsgroup: it.comp.os.linux.debian
Titolo: /dev per unità a nastro usb

Sto tentando di usare un'unità a nastro HP DAT72 (in versione esterna, 
USB) su una macchina Linux con Debian Etch e kernel 2.6.21.
Una volta collegata, dando "modprobe usb_storage" viene riconosciuta 
(riporto sotto i messaggi).
Secondo dmesg, gli vengono assegnate le devices st1 e sg4.
Solo che nonostante questo non risultano esistere né /dev/st1, né /dev/sg4.
Credo di aver capito che dovrebbero essere create automaticamente da 
udev, ma così non è.
Come faccio a farle apparire?
Grazie
Giovanni
---------------------------------------------------------
dmesg
st 7:0:0:0: Attached scsi tape st1
st 7:0:0:0: st1: try direct i/o: yes (alignment 512 B)
st 7:0:0:0: Attached scsi generic sg4 type 1
---------------------------------------------------------
cat /proc/scsi/scsi
Host: scsi7 Channel: 00 Id: 00 Lun: 00
   Vendor: HP       Model: C7438A           Rev: ZU75
   Type:   Sequential-Access                ANSI  SCSI revision: 03
---------------------------------------------------------
lshw
            *-usbhost
                 product: EHCI Host Controller
                 vendor: Linux 2.6.21-2-686 ehci_hcd
                 physical id: 1
                 bus info: usb@7
                 logical name: usb7
                 version: 2.06
                 capabilities: usb-2.00
                 configuration: maxpower=0mA slots=6 speed=480.0MB/s
               *-usb
                    description: Generic USB device
                    product: DAT72 USB Tape
                    vendor: Hewlett Packard
                    physical id: 3
                    bus info: usb@7:3
                    logical name: scsi7
                    version: 30.30
                    serial: 4855310628553047
                    capabilities: usb-2.00 emulated scsi-host
                    configuration: driver=usb-storage maxpower=2mA
speed=480.0MB/s
                  *-tape UNCLAIMED
                       description: SCSI Tape
                       product: C7438A
                       vendor: HP
                       physical id: 0.0.0
                       bus info: scsi@7:0.0.0
                       version: ZU75
                       serial: HU10628U0G
                       capabilities: removable
                       configuration: ansiversion=3
---------------------------------------------------------

, Giovanni Gigante says...

SUBSYSTEMS=="scsi", ATTRS{serial)=="HU10628U0G", NAME="%k", 
SYMLINK+="tape" 
ficcalo dentro a una rule in /etc/udev/rules ...	
poi lo vedi o come /dev/st1 o tramite /dev/tape che il symlink a st1.

grazie mille per l'aiuto, Poeta.
però ancora non riesco ad arrivare al traguardo. Ho aggiunto le tue 
preziose regole (dopo aver corretto una parentesi :-)) e nonostante 
tutto la /dev non appare.
Se do "udevtest /sys/class/scsi_tape/st1" dopo una lunga sfilza di 
messaggi tipo "parsing file bla bla bla" (senza errori) dice:
main: looking at device '/class/scsi_tape/st1' from subsystem 'scsi_tape'
udev_rules_get_name: no node name set, will use kernel name 'st1'
udev_db_get_device: no db file to read 
/dev/.udev/db/class@scsi_tape@st1: No such file or directory
udev_node_add: creating device node '/dev/st1', major = '9', minor = 1', 
mode = '0660', uid = '0', gid = '26'
main: run: 'socket:/org/kernel/udev/monitor'
main: run: 'socket:/org/freedesktop/hal/udev_event'
Nel dubbio ho provato anche con "udevcontrol reload_rules" e niente.
E infine ho provato con "udevtrigger --verbose 
'--attr-match=model=C7438A          '" e lui risponde:
/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host10/target10:0:0/10:0:0:0
ma /dev/st1 continua a non esserci.
(/sys/class/scsi_tape/st1 invece sta sempre lì in bella mostra).
Cosa sbaglio? Cosa ho dimenticato?
Grazie
giovanni


 Cosa sbaglio? Cosa ho dimenticato?
sarebbe un po' troppo grossa come dimesnticanza ma tentar ...
lsmod |grep sd_mod 

 lsmod |grep sd_mod 
sT_mod
-- 
Flavio Visentin
Scientists have finally discovered what's wrong with the female brain:
On the left side, there is nothing right, and on the right side, there
is nothing left.

 lsmod |grep sd_mod 
non c'è st_mod, ma c'è st. Dovrebbe andar bene lo stesso, no?
# lsmod | grep st
usb_storage            76352  0
st                     35292  0
ide_core              115528  4 usb_storage,ide_generic,generic,jmicron
scsi_mod              134124  9 
usb_storage,sbp2,sg,sr_mod,st,sd_mod,aic7xxx,scsi_transport_spi,libata
usbcore               123400  5 usb_storage,usbhid,ehci_hcd,uhci_hcd
per altro su /dev/st0 ho una vecchia unità a nastro (tradizionale scsi) 
che funziona da tempo immemorabile. Il mio problema è convincere udev a 
creare /dev/st1 per quell'altra usb quando la connetto...
Qualcuno mi ha suggerito di usare mknod ma mi pare un po' old style come 
soluzione...
g

, 
gi...@cidoc.iuav.it
 says...

allora imho ci stiam perdendo in un bicchier d'acqua
che eicula ?
udevinfo -a -p /sys/class/scsi_tape/st1
poi per vedere non ci siano casini strani
/sys/class/scsi_tape/st1
il nome i default assegnato dal kernel è st1
quindi la regola barbara
KERNEL=="st1", NAME="pippo" 
deve matchare. Se non trovi /dev/pippo c peoccupiamo, altrimenti abbiam 
solo toppato la regola.

 solo toppato la regola.
in tal caso ci preoccupiamo, Sommo Poeta. Il mistero si infittisce.
- udevmonitor mi mostra che quando l'unità viene accesa, udev in qualche 
modo se ne accorge, benché ciò non sembri produrre alcun effetto pratico;
- udevinfo (come mi hai suggerito) mostra la periferica;
- udevtest dice che secondo lui dovrebbe creare la /dev/pippo (anche se 
dà alcuni messaggi che non so se sono normali).
Sotto riporto gli output di tutti e tre.
in ogni caso, alla fine della fiera, niente /dev/pippo.
per inciso ho provato a settare "udevcontrol log_priority=debug" nella 
speranza di scoprire qualcosa di più, ma in che diavolo di log vanno a 
finire questi messaggi? non riesco a trovarli da nessuna parte.
g.
btw, il numero di unità scsi cambia ogni volta, quindi non è sempre lo 
stesso nei messaggi che riporto qui sotto.
------------------------------------------------------------------------
$ udevinfo -a -p /sys/class/scsi_tape/st1
Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
   looking at device '/class/scsi_tape/st1':
     KERNEL=="st1"
     SUBSYSTEM=="scsi_tape"
     DRIVER==""
     ATTR{default_compression}=="-1"
     ATTR{default_density}=="-1"
     ATTR{default_blksize}=="-1"
     ATTR{defined}=="1"
     ATTR{dev}=="9:1"
   looking at parent device 
'/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host12/target12:0:0/12:0:0:0':
     KERNELS=="12:0:0:0"
     SUBSYSTEMS=="scsi"
     DRIVERS=="st"
     ATTRS{ioerr_cnt}=="0x0"
     ATTRS{iodone_cnt}=="0x2"
     ATTRS{iorequest_cnt}=="0x2"
     ATTRS{iocounterbits}=="32"
     ATTRS{timeout}=="900"
     ATTRS{state}=="running"
     ATTRS{rev}=="ZU75"
     ATTRS{model}=="C7438A          "
     ATTRS{vendor}=="HP      "
     ATTRS{scsi_level}=="4"
     ATTRS{type}=="1"
     ATTRS{queue_type}=="none"
     ATTRS{queue_depth}=="1"
     ATTRS{device_blocked}=="0"
     ATTRS{max_sectors}=="240"
   looking at parent device 
'/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host12/target12:0:0':
     KERNELS=="target12:0:0"
     SUBSYSTEMS==""
     DRIVERS==""
   looking at parent device 
'/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host12':
     KERNELS=="host12"
     SUBSYSTEMS==""
     DRIVERS==""
   looking at parent device 
'/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0':
     KERNELS=="7-3:1.0"
     SUBSYSTEMS=="usb"
     DRIVERS=="usb-storage"
     ATTRS{interface}=="SCSI Over USB????????"
     ATTRS{modalias}=="usb:v03F0p0125d3030dc00dsc00dp00ic08isc06ip50"
     ATTRS{bInterfaceProtocol}=="50"
     ATTRS{bInterfaceSubClass}=="06"
     ATTRS{bInterfaceClass}=="08"
     ATTRS{bNumEndpoints}=="02"
     ATTRS{bAlternateSetting}==" 0"
     ATTRS{bInterfaceNumber}=="00"
   looking at parent device '/devices/pci0000:00/0000:00:1a.7/usb7/7-3':
     KERNELS=="7-3"
     SUBSYSTEMS=="usb"
     DRIVERS=="usb"
     ATTRS{serial}=="4855310628553047"
     ATTRS{product}=="DAT72 USB Tape"
     ATTRS{manufacturer}=="Hewlett Packard"
     ATTRS{quirks}=="0x0"
     ATTRS{maxchild}=="0"
     ATTRS{version}==" 2.00"
     ATTRS{devnum}=="7"
     ATTRS{speed}=="480"
     ATTRS{bMaxPacketSize0}=="64"
     ATTRS{bNumConfigurations}=="1"
     ATTRS{bDeviceProtocol}=="00"
     ATTRS{bDeviceSubClass}=="00"
     ATTRS{bDeviceClass}=="00"
     ATTRS{bcdDevice}=="3030"
     ATTRS{idProduct}=="0125"
     ATTRS{idVendor}=="03f0"
     ATTRS{bMaxPower}=="  2mA"
     ATTRS{bmAttributes}=="80"
     ATTRS{bConfigurationValue}=="1"
     ATTRS{bNumInterfaces}==" 1"
     ATTRS{configuration}=="High Speed"
   looking at parent device '/devices/pci0000:00/0000:00:1a.7/usb7':
     KERNELS=="usb7"
     SUBSYSTEMS=="usb"
     DRIVERS=="usb"
     ATTRS{serial}=="0000:00:1a.7"
     ATTRS{product}=="EHCI Host Controller"
     ATTRS{manufacturer}=="Linux 2.6.21-2-686 ehci_hcd"
     ATTRS{quirks}=="0x0"
     ATTRS{maxchild}=="6"
     ATTRS{version}==" 2.00"
     ATTRS{devnum}=="1"
     ATTRS{speed}=="480"
     ATTRS{bMaxPacketSize0}=="64"
     ATTRS{bNumConfigurations}=="1"
     ATTRS{bDeviceProtocol}=="01"
     ATTRS{bDeviceSubClass}=="00"
     ATTRS{bDeviceClass}=="09"
     ATTRS{bcdDevice}=="0206"
     ATTRS{idProduct}=="0000"
     ATTRS{idVendor}=="0000"
     ATTRS{bMaxPower}=="  0mA"
     ATTRS{bmAttributes}=="e0"
     ATTRS{bConfigurationValue}=="1"
     ATTRS{bNumInterfaces}==" 1"
     ATTRS{configuration}==""
   looking at parent device '/devices/pci0000:00/0000:00:1a.7':
     KERNELS=="0000:00:1a.7"
     SUBSYSTEMS=="pci"
     DRIVERS=="ehci_hcd"
     ATTRS{msi_bus}==""
     ATTRS{broken_parity_status}=="0"
 
ATTRS{modalias}=="pci:v00008086d0000293Csv00001043sd00008277bc0Csc03i20"
     ATTRS{local_cpus}=="ff"
     ATTRS{irq}=="19"
     ATTRS{class}=="0x0c0320"
     ATTRS{subsystem_device}=="0x8277"
     ATTRS{subsystem_vendor}=="0x1043"
     ATTRS{device}=="0x293c"
     ATTRS{vendor}=="0x8086"
   looking at parent device '/devices/pci0000:00':
     KERNELS=="pci0000:00"
     SUBSYSTEMS==""
     DRIVERS==""
------------------------------------------------------------------------
$ udevtest /sys/class/scsi_tape/st1
...
parse_file: reading '/etc/udev/rules.d/hp_dat72_tape_giov.rules' as 
rules file
...
main: looking at device '/class/scsi_tape/st1' from subsystem 'scsi_tape'
udev_rules_get_name: rule applied, 'st1' becomes 'pippo'
udev_db_get_device: no db file to read 
/dev/.udev/db/class@scsi_tape@st1: No such file or directory
udev_node_add: creating device node '/dev/pippo', major = '9', minor = 
'1', mode = '0660', uid = '0', gid = '26'
main: run: 'socket:/org/kernel/udev/monitor'
main: run: 'socket:/org/freedesktop/hal/udev_event'
------------------------------------------------------------------------
questo è quello che succede quando accendo l'unità:
# udevmonitor
UEVENT[1212164725.053482] add@/devices/pci0000:00/0000:00:1a.7/usb7/7-3
UEVENT[1212164725.053524] add@/class/usb_endpoint/usbdev7.9_ep00
UEVENT[1212164725.053861] 
add@/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0
UEVENT[1212164725.053981] add@/class/scsi_host/host14
UEVENT[1212164725.054218] add@/class/usb_endpoint/usbdev7.9_ep02
UEVENT[1212164725.054241] add@/class/usb_endpoint/usbdev7.9_ep86
UEVENT[1212164725.054274] add@/class/usb_device/usbdev7.9
UEVENT[1212164730.068234] 
add@/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host14/target14:0:0/14:0:0:0
UEVENT[1212164730.068274] add@/class/scsi_tape/st1
UEVENT[1212164730.068281] add@/class/scsi_tape/nst1
UEVENT[1212164730.068287] add@/class/scsi_tape/st1l
UEVENT[1212164730.068292] add@/class/scsi_tape/nst1l
UEVENT[1212164730.068323] add@/class/scsi_tape/st1m
UEVENT[1212164730.068331] add@/class/scsi_tape/nst1m
UEVENT[1212164730.068336] add@/class/scsi_tape/st1a
UEVENT[1212164730.068341] add@/class/scsi_tape/nst1a
UEVENT[1212164730.068398] add@/class/scsi_device/14:0:0:0
UEVENT[1212164730.068424] add@/class/scsi_generic/sg4
tuttavia dopo in /dev/.udev/db non trovo class@scsi_tape@st1 (è normale?)
------------------------------------------------------------------------

      DRIVER==""
imho è qui; manca il driver che gestisce l'host
se dice culo:
modprobe ide-scsi
altrimenti un
install scsi_hostadapter 	/bin/true
in /etc/modprobe.conf

Poeta,
mi sparo. (prima che mi spari tu).
ho scoperto la tragica e semplicissima ragione per cui questa cosa non 
funzionava da nessun punto di vista...
# pgrep -l udevd
#
non c'è udevd!!!
(e ti credo io che non voleva neanche creare i log...)
Do "/etc/init.d/udev start", et voilà, tutto appare automagicamente.
mi vergogno.
Però, mica che gente come "udevcontrol" o "udevtrigger" si degni di 
dirlo, che sto parlando ai muri? macché. Fanno finta di niente. Fingono 
di lavorare.
Comunque, sembra che Etch non si sogni neanche di lanciare udevd al 
boot. In /etc/rc2.d non ve n'è traccia. C'è qualche controindicazione ad 
aggiungercelo?
g.

 aggiungercelo?
come si dice da voi debianisti chkconfig ?
boot.udev deve essere on.

 boot.udev deve essere on.
Se non fossi un utente camaleontico sapresti che
a) udev parte di rcS (per l'esattezza in S03udev)
b) da noi non esistono porcherie chiamate boot.qualcosa ma solo programmi
chiamati con il loro nome.
c) chkconfig non è il metodo standard per gestire gli script di avvio in Debian.
Adesso vai a mimetizzarti :-)


 Adesso vai a mimetizzarti :-)
e quale sarebbe il gestore degli script di avvio in debian ? ln -s ?
P.S: era buona la battuta del modprobing di st_mod. Anche questo manca 
al camaleonte, mannaggia! :-P

 al camaleonte, mannaggia! :-P
:-DDDDDDD


 mi sparo. (prima che mi spari tu).
per curiosità ... lo riposti il:
udevinfo -a -p /sys/class/scsi_tape/st1
sistemato il problema che vediamo quale era la sequenza di tree dove 
l'inserimento del driver saltava, se qualcosa di intermedio saltava e 
non la semplice creazione del device , si intende.
Intendo questo:
ehci_hcd --> usb --> usb-storgage --> (host12 scsi) ? --> ST 

> a) udev parte di rcS (per l'esattezza in S03udev)
l'avevo notato anche io che lì c'è, e inoltre, visto che df confermava 
che /dev era montato col filesystem udev, per questa ragione supponevo 
che udevd fosse sempre attivo a partire dal boot. Così non era. Quindi, 
a posteriori mi sono venute in mente queste possibilità:
a) udevd in origine girava, ma a un certo punto è morto di sua 
iniziativa per cause misteriose (non so quando, nei log non ho trovato 
niente, d'altronde chissà quando è successo)
b) oppure il meccanismo è proprio diverso, tipo, che udev viene lanciato 
one-shot al boot, ma non come demone.
Puoi illuminarmi?
g.

 ehci_hcd --> usb --> usb-storgage --> (host12 scsi) ? --> ST  
eccolo qui, fresco fresco (con device funzionante):
# udevinfo -a -p /sys/class/scsi_tape/st1
Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
   looking at device '/class/scsi_tape/st1':
     KERNEL=="st1"
     SUBSYSTEM=="scsi_tape"
     DRIVER==""
     ATTR{default_compression}=="-1"
     ATTR{default_density}=="-1"
     ATTR{default_blksize}=="-1"
     ATTR{defined}=="1"
     ATTR{dev}=="9:1"
   looking at parent device 
'/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host18/target18:0:0/18:0:0:0':
     KERNELS=="18:0:0:0"
     SUBSYSTEMS=="scsi"
     DRIVERS=="st"
     ATTRS{ioerr_cnt}=="0x0"
     ATTRS{iodone_cnt}=="0x2"
     ATTRS{iorequest_cnt}=="0x2"
     ATTRS{iocounterbits}=="32"
     ATTRS{timeout}=="900"
     ATTRS{state}=="running"
     ATTRS{rev}=="ZU75"
     ATTRS{model}=="C7438A          "
     ATTRS{vendor}=="HP      "
     ATTRS{scsi_level}=="4"
     ATTRS{type}=="1"
     ATTRS{queue_type}=="none"
     ATTRS{queue_depth}=="1"
     ATTRS{device_blocked}=="0"
     ATTRS{max_sectors}=="240"
   looking at parent device 
'/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host18/target18:0:0':
     KERNELS=="target18:0:0"
     SUBSYSTEMS==""
     DRIVERS==""
   looking at parent device 
'/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host18':
     KERNELS=="host18"
     SUBSYSTEMS==""
     DRIVERS==""


     ATTRS{devnum}=="13"



     ATTRS{enable}=="1"


      ATTRS{enable}=="1"
eggià. Ecce novus. Tutto giusto ma non veniva attivato il device radice 
di driver tal ehci_hcd, che restava disabilitato. Probabilmente un 
timeout o qualcosa del genere.
Vabbè sulla tua domanda del perchè avessi udev disabilitato non so 
riponderti.
A casa mia (una vetusta opensuse 10.1 nella fattispecie) udev è un 
demone resta in esecuzione a prescindere dal nome dello script di avvio
dmitry:~ # ps ax |grep udev
 1656 ?        S<s    0:11 /sbin/udevd --daemon
19812 pts/0    R+     0:00 grep udev
per la precisione lo script boot lancia il demone, configura le 
assegnazioni statiche e poi trigga, infine "settla", traducendo 
abbestia.
...
PATH="/sbin:/bin"
DAEMON=/sbin/udevd
udevd_args="--daemon"
case "$1" in
    start)
	# disable uevent helper, udevd listens to netlink
	echo "" > /sys/kernel/uevent_helper
	# start udevd (needs to block until we are initialized)
	echo -n "Starting udevd "
	$DAEMON $udevd_args
	if [ $? -ne 0 ]; then
		rc_status -v
		rc_exit
	fi
	rm -rf /dev/.udev
	# cleanup stuff
	rm -rf /events/*
	# run static device configurations
	HWCFG_STUB=/etc/sysconfig/hardware/hwcfg
	for cfg in ${HWCFG_STUB}-static*; do
	    if [ -f $cfg ]; then
		/sbin/hwup ${cfg#$HWCFG_STUB-} ${cfg#$HWCFG_STUB-static-} 
-o auto > /dev/null 2>&1
	    fi
	done
	# trigger events for all devices
	/sbin/udevtrigger
	# wait for events to finish
	/sbin/udevsettle --timeout=180
	rc_status -v
	;;
Nel caso tuo non so. Ci vorrebbe un debianista per vedere in base quale 
file configurazione è eventualmente alterabile la sequenza. Ma oggi son 
nervosi con me per via del kde 4 :)
Cmq ci vuol poco, bsta un file cancellato, un errore una tantum, una 
variazione storica negli script di avvio (mgari tu aggiorni da sistemi 
molto vecchi)  ... non necessariamente è un mistero.
Sei hai risolto non ne farei una malattia.

 Puoi illuminarmi?
a)


> Sei hai risolto non ne farei una malattia.
no, hai ragione.
Ti ringrazio molto per l'assistenza!
g