Skip to content

hcanhid udev

hcanIngo edited this page Dec 22, 2015 · 2 revisions

hcanhid mit udev

Das udev-System http://en.wikipedia.org/wiki/Udev sorgt dafuer, das an einem Linux-System angeschlossene Geraete bestimmte Namen im /dev Verzeichnis erhalten. Fuer den FT245, der auf dem Hostinterface verbaut ist, wird im Standardfalle ein /dev/ttyUSBx Device Node angelegt. Das Problem dabei ist, dass man im Voraus nicht weiss, welche Nummer fuer x eingesetzt wird - das legt udev zur Laufzeit dynamisch aufsteigend fest.

Daher ist es wuenschenswert, sowohl den Devicenamen, als auch gleich die Gruppe und Rechte festzulegen. Das geschieht mittels udev rules:

SUBSYSTEM=="tty", ATTRS{serial}=="0002", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", \
NAME="hcanhi0", MODE:="0660", GROUP:="hcanhi"

Weitere Infos zum Schreiben von udev rules finden sich unter http://www.reactivated.net/writing_udev_rules.html.

Um das System passend zu konfigurieren, sind folgende Schritte noetig:

hcanhi Gruppe anlegen

groupadd --system hcanhi

Damit koennen nun nur root und Benutzer der Gruppe hcanhi auf das Hostinterface zugreifen.

Serien-Nummer des Hostinterface setzen bzw. ermitteln

Hinweis: bei den Hostinterfaces eines HCAN Starterkits ist bereits eine Seriennummer gesetzt.

Das Zuweisen einer Seriennummer geschieht mit dem Tool ftdi-eeprom, welches unter Debian wie gewohnt ueber das APT System installiert werden kann:

apt-get install ftdi-eeprom

Man legt nun eine Konfigurationsdatei namens "ftdi-eeprom.cf" mit folgendem Inhalt an:

vendor_id=0x0403        # Vendor ID
product_id=0x6001       # Product ID

max_power=50            # Max. power consumption: value * 2 mA. Use 0 if self_powered = true.

###########
# Strings #
###########
manufacturer="HCAN Labs, wiki.openhcan.de" # Manufacturer
product="HCAN Hostinterface v02"       # Product
serial="15"                            # Serial

###########
# Options #
###########
self_powered=off        # Turn this off for bus powered
remote_wakeup=false     # Turn this on for remote wakeup feature
use_serial=true         # Use the serial number string

# Normally out don't have to change one of these flags
BM_type_chip=true               # Newer chips are all BM type
in_is_isochronous=false         # In Endpoint is Isochronous
out_is_isochronous=false        # Out Endpoint is Isochronous
suspend_pull_downs=false        # Enable suspend pull downs for lower power
change_usb_version=false        # Change USB Version
usb_version=0x0200              # Only used when change_usb_version is enabled

########
# Misc #
########

filename="eeprom.new"   # Filename, leave empty to skip file writing

ACHTUNG: Wird ein FT245BL verwendet, so muss in der Konfiguration gesetzt werden:

BM_type_chip=false

Zum Beschreiben des FTDI EEPROMs muss das Kernel Modul entladen werden:

rmmod ftdi_sio

Dann werden die Daten geschrieben:

ftdi_eeprom --flash-eeprom ftdi-eeprom.cf

Nun wieder das Kernel-Modul laden:

modprobe ftdi_sio

Die Seriennummer kann nun z.B. mittels lsusb ermittelt werden:

$ lsusb -v | less
...
Bus 001 Device 016: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Device Descriptor:
bLength                18
bDescriptorType         1
bcdUSB               1.10
bDeviceClass            0 (Defined at Interface level)
bDeviceSubClass         0 
bDeviceProtocol         0 
bMaxPacketSize0         8
idVendor           0x0403 Future Technology Devices International, Ltd
idProduct          0x6001 FT232 USB-Serial (UART) IC
bcdDevice            4.00
iManufacturer           1 HCAN Labs, wiki.openhcan.de
iProduct                2 HCAN Hostinterface v02
iSerial                 3 0002
bNumConfigurations      1
Configuration Descriptor:
...

Anlegen der udev rules

Nun wird eine Datei /etc/udev/rules.d/00-hcan.rules mit folgendem Inhalt erzeugt:

# HCAN udev rules
#
# siehe http://wiki.iuse.org/wiki/doku.php?id=hcanhid-udev
#

SUBSYSTEM=="tty", ATTRS{serial}=="0002", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", \
  NAME="hcanhi0", MODE:="0660", GROUP:="hcanhi"

Das udev System wird neu gestartet:

/etc/init.d/udev restart

Das USB-Kabel des Hostinterfaces wird nun kurz aus- und wieder eingesteckt. Der Erfolg:

$ ls -l /dev/hcanhi0
crw-rw---- 1 root hcanhi 188, 0 2009-03-08 13:34 /dev/hcanhi0

Nun ist dieser Name (mit den Rechten und der Gruppe) immer existent, wenn das Hostinterface eingesteckt ist.

Clone this wiki locally