← Back to team overview

sslug-teknik team mailing list archive

Re: skelne mellem forskellige USB porte

 

Kristian Nørgaard wrote:
Hvordan detekterer jeg hvilken konkret USB port i en PC at et givent memory device er tilsluttet?

Jeg formoder det ikke kan lade sig gøre igennem en USB hub, men måske når det er direkte ind i PC'en?

Det er ikke så interessant hvilken USB port et device
er tilsluttet.
lsusb viser busnummer og devicenummer, men det kan ikke bruges til noget, hvis det drejer sig om at mounte en partition.
Man kan bruge fdisk -l, som viser hvilke partitions en
usbdisk har, men det skifter afhængig af rækkefølgen devices
bliver detekteret i.
Har man f.eks. to diske vil devicenavne blive /dev/sda og
/dev/sdb, men det er ikke entydigt hvilken disk der er sda
og hvilken der er sdb.
Det problem klares med udev.
Programmet udevinfo lister informationer om et device. Ved
at sammenligne informationer fra flere devices kan man finde
en information, der er unik for et givet device. Den
information kan så bruges i en udev-rule, som udev kan bruge
til at oprette et link til en aktuel partition.
Det er beskrevet i:
Writing udev rules
http://reactivated.net/writing_udev_rules.html

Jeg har en intern SCSI-disk, en ekstern USB-disk og en
kortlæser i multifunktions printer
SCSI-diske og USB-diske får devicenavne sda, sdb, sdc osv.
I Mandriva 2007 indgår alle disse disktyper i puljen til
tildeling af device-navne, således at heller ikke den
interne SCSI-disk altid får samme navn.

Det problem klarer udev.
I filen /etc/udev/rules.d/00.rules har jeg reglerne:
BUS=="scsi",ATTRS{vendor}=="QUANTUM",
KERNEL=="sd?1",NAME="%k",SYMLINK+="scsidisk"

BUS=="scsi",ATTRS{vendor}=="ST380011",ATTR{start}=="63",
KERNEL=="sd?1",NAME="%k",SYMLINK+="usbext3"

BUS=="scsi",ATTRS{vendor}=="ST380011",ATTR{start}=="131668803",
NAME="%k",SYMLINK+="usbvfat"

og

BUS=="scsi",ATTRS{vendor}=="HP      ",
KERNEL=="sd?1",NAME="%k",SYMLINK+="cfcard"

fdisk -l giver:

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        8196    65834338+  83  Linux
/dev/sda2            8197        9729    12313822+   5  Extended
/dev/sda5 8197 9729 12313791 b W95 FAT32

Disk /dev/sdb: 32 MB, 32112640 bytes
4 heads, 32 sectors/track, 490 cylinders
Units = cylinders of 128 * 512 = 65536 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1 * 1 489 31280 4 FAT16 <32M

Disk /dev/sdc: 36.7 GB, 36778545152 bytes
255 heads, 63 sectors/track, 4471 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1        4472    35913591   83  Linux

Der er en 38GB SCSI-disk, en 80GB USB-disk med en ext3 partition og en FAT32 partition samt en kortlæser med et 32MB CF-card.

Udev har defineret flg. symbolske links:
/dev/scsidisk -> sdc1
/dev/usbext3 -> sda1
/dev/usbvfat -> sda5
/dev/cfcard -> sdb1

I /etc/fstab har jeg
/dev/scsidisk /mnt/scsidisk ext3 user,noauto 0 0
/dev/usbext3 /mnt/usbext3 ext3 user,noauto 0 0
/dev/usbvfat /mnt/usbvfat vfat user,noauto 0 0
/dev/cfcard /mnt/cfcard vfat user,noauto 0 0

Der er ikke automount, men flg. mount-kommandoer skal bruges:
mount /mnt/scsidisk
mount /mnt/usbext3
mount /mnt/usbvfat
mount /mnt/cfcard



--
Med venlig hilsen

Jørgen Heesche
mailto:heesche@xxxxxxxxxxx



Follow ups

References