19.04.2023

Linux System

Linux Tastenkombinationen
Konfigurations-Dateien und Verzeichnisse unter Linux
System Anpassung
Systemreparatur
Bootmanager - Grub2/Grub/LiLo
Hardwareerkennung
Paket-Verwaltung
Init-System SysV-Init, Systemd, Upstart, Busybox u.a.
System Protokollierung - syslog
PAM Zugriffssteuerung
Admin-Rechte-Steuerung
Kernel 2.4 | 2.6
Linux Intrusion Detection System (LIDS)
User Mode Linux UML
Dateisysteme
Drucken unter Linux
Sound konfigurieren
Partition kopieren
IPX Protokoll
SoftwareRAID
Netzwerk
Bluetooth
X-Server und Desktops
64Bit und 32Bit auf einem System
ACPI System einrichten
Shared Libraries
Linux Console
Jobs mit cron automatisieren
PCMCIA
ISDN und Capi
VNC-Server einrichten
Verschlüsselter Zugriff auf Ressourcen übers Netzwerk
Festplatten Überwachen mit S.M.A.R.T
Linux Systemhilfe richtig verwenden
sudo konfigurieren
Installation aus den Sourcen
SCSI Emulation für ATAPI Geräte einrichten
cloop (Komprimiertes Loopback Device) einrichten
Übersicht ext2 / ext3 Zusatzflags
Versionsverwaltung von Dateien
SSHFS einrichten
Linux unter VMware
sonstiges

Navigation:

Links:
Gerätemanagement über dynamischen Kernel mithilfe von udev
ubuntu Wiki
Linux Magazin
uDev Regeln
Debian Wiki
Archlinux Wiki udev

Seitenanfang

Linux Gerätedateien

/dev/ippp? Netzwerkdevice für PPP-Verbindungen über ISDN (SyncPPP)
/dev/modem default Schnittstelle für Modem, meiste ein SymLink auf /dev/ttys?
/dev/ttyI? isdn4linux virtual modem (eingehende Verbindungen)
/dev/cui? isdn4linux virtual modem (ausgehende Verbindungen) cui1 ist das Gegenstück zu ttyI1
/dev/capi20 CAPI 2.0 interface
/dev/ttys? serielle Schnittstellen (eingehende Verbindungen) ttys0=COM1, ttys1=COM2 usw.
/dev/cua? serielle Schnittstellen (ausgehende Verbindungen) cua1 ist das Gegenstück zu ttys1
/dev/ttyp? Pseudo TTY
/dev/tty? virtuelle Konsole
/dev/null geschriebene Daten werden ignoriert
/dev/zero Leseanforderungen liefern immer eine folge von Nullbyte zurück (kann benutzt werden um eine SWAP Datei zu erzeugen)
/dev/hda1 erste Partition der ersten Festplatte
/dev/mem Physikalischer Speicher des Systems

/usr/src/linux/Documentation/devices.txt hier kann man die Major / Minor Nummern nachsehen

# ls -l
brw-rw---- 1 root disk 3, 0 May 19 1994 /dev/hda

- erste Buchstabe im Berechtigungsfeld
b - steht für Block-Device (blockorientiertes Gerät)
c - steht für Character-Device (zeichenorientiertes Gerät)
Das Feld für die Dateigröße besteht aus zwei Zahlen, die durch ein Komma getrennt sind.
Der erste Wert ist die Major Device Number, der zweite die Minor Device Number.

- eine Gerätedatei erzeugen mit:

mknod -m Berechtigungen Name Typ Major Minor

wobei
name der komplette Pfadname der zu erzeugenden Gerätedatei ist, zum Beispiel /dev/rft0.
typ entweder c für Character-Device oder b für Block-Device ist.
major die Major Number des Gerätes ist.
minor die Minor Number des Gerätes ist.
-m berechtigungen ein optionales Argument ist, mit dem die Berechtigungen für das neue Gerät auf berechtigungen gesetzt werden z.B.

mknod /dev/blogg b 42 0

erstellt ein Block-Device (b) unter dem Namen blogg (dev/blogg) Major Number 42 und der Minor Number 0

mknod -m 666 /dev/bogus b 42 0

wie oben nur mit der Berechtigung 666 statt Standard 644.

man kann auch mit dem Shellscript MAKEDEV eine Gerätedatei anlegen, es brauch nur noch der Name angegeben werden, Major und Minor Nummer findet MAKEDEV selbstständig.

dem Benutzer keine direkten Berechtigungen auf Gerätedateien geben, das sie sonst mit "mkfs" z.B. die Daten einer Partition vernichtet werden kann.
mit Schreibberechtigung können Daten zerstört werden, mit Leseberechtigungen z.B. (/dev/hda2) auf eine Partition kann man Daten anderer Benutzer einsehn, oder bei (/dev/mem) steht für den physikalischen Speicher eines Systems, kann man Passwörter einsehen die beim Login eingegeben werden.

Seitenanfang

statische Devices

Bei statischen Device, werden alle möglichen Gerätedateien unter /dev schon im vorraus angelegt, im Gegensatz zu dynamischen Device wie bei uDev die erst beim vorhandensein der Hardware erzeigt werden.

- einen Grundstock von Gerätedateien anlegen.

MAKEDEV generic-i386

- Gerätedateien updaten, eine Liste aus /proc/devices wird gelesen und die fehlenden Device unter /dev werden angelegt.

MAKEDEV update

- alle ttyXX Gerätedateien erstellen

MAKEDEV console

- ein einzelnes Device anlegen, im Beispiel das TUN Tunnel-Device

mknod /dev/net/tun c 10 200
Seitenanfang

uDev die Ablösung des Hotplug-Daemons

Der Kernel ermittelt, welcher Treiber zu einem Gerät gehört, anhand der IDs die jedes Gerät beim anstecken übermittelt. Dies sind die VendoeID, DeviceID, SubvendorID und SubdeviceID, alsauch die Geräteklasse. Die Treiber ihrerseits, teilen dem Kernel über das Makro MODULE_ALIAS alle IDs mit für die sie verantwortlich sind. Diese werden für PCI Device in der Datei /lib/modules/$(uname -r)/modules.pcimap verzeichnet. modinfo <modulname> zeigt die IDs für die das einzelne Module verantwortlich ist an. Hat der Kernel einen Treiber geladen, ist das Gerät eigentlich betriebsbereit. Soll eine Anwendung auf ein Gerät zugreifen, benötigt es den Namen des DeviceFiles. Für das anlegen des DeviceFiles ist dann der uDev Daemon zuständig. Der uDev Daemon wird vom Kernel über ein User-Event (Uevent) benachrichtigt, wenn neue Hardware erkannt wurde.

Verzeichnis/Datei Beschreibung
/etc/udev Konfigurationsverzeichnis
/etc/udev/udev.conf Konfigurationsdatei für udev
/lib/udev Programmverzeichnis
/etc/udev/rules.d Verzeichnis für die Regeln, Benutzerdefinierte Regeln
/lib/udev/rules.d Grundlegende Regeln
/etc/udev/rules.d/z25_persistent-net.rules Benutzerdefinierte Regeldatei, Netzwerkkarten wie eth0, eth1 werden in der folgenden Datei (unter Debian) zugeordnet

- bei Problemen mit udev, kann der LogLevel auf err, info (Default) oder debug gesetzt werden.

# /etc/udev/udev.conf
# see udev.conf(5) for details
#
# udevd is started in the initramfs, so when this file is modified the
# initramfs should be rebuilt.

udev_log="info"

es sollten in den Verzeichnissen keine Dateien bearbeitet werden, lieber für neue oder geänderte Regeln auch neue Dateien anlegen, die dann auch ein uDev Update überstehen. Die Regeln werden in alphabetischer Reihenfolge abgearbeitet.

Seitenanfang

uDev Regeln

Die Regeln bestehen aus einer oder mehere Bedingung(en) und der Aktion.

SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:0b:5d:96:a3:0f", ATTR{type}=="1", NAME="eth0"

Der Netzwerkkarte mit der MAC 00:0b:5d:67:12:05 wid der das Device eth0 zugewiesen.

SUBSYSTEM=="usb", ATTRS{serial}=="0815", OWNER="1000" , MODE="0600"

Des USB Gerät mit der Seriennummer 0815, darf nur vom User mit der ID 1000 genutzt werden.

Mobiltelefon als UMTS Modem einbinden

SUBSYSTEMS=="usb", KERNEL=="ttyacm[0-9]*", ATTR{idVendor}=="0fce", \
ATTR{idProduct}=="0076", ATTR{serial}=="?*", SYMLINK+="umtsmodem"

max. fünf ATTR oder ENV-Attribut Aufrufe sind pro Regel erlaubt. uDev schaut im /sys Verzeichnis des angegebenen Gerätes (usb) nach der Datei idVendor und prüft ob da der Eintrag 0fce enthalten ist, dann werden noch die Dateien idProduct und serial geprüft, stimmen diese mit den Angaben überein wird der Symlink umtsmodem angelegt. Als erstes mit udevadm monitor die uevents anzeigen lassen, dann mit udevinfo -a -p <Device> die übergebenen Attribute anzeigen lassen.

# udevadm monitor
udevmonitor will print the received events for:
UDEV the event which udev sends out after rule processing
UEVENT the kernel uevent

UDEV  [1226406560.453882] add      /devices/pci0000:00/0000:00:1d.7/usb5/5-3 (usb)
UEVENT[1226406560.454893] add      /devices/pci0000:00/0000:00:1d.7/usb5/5-3/5-3:1.0 (usb)
UEVENT[1226406560.454931] add      /class/usb_endpoint/usbdev5.3_ep01 (usb_endpoint)
...
# udevadm info -a /sys/devices/pci0000\:00/0000\:00\:14.0/usb3/3-2/

P: /devices/pci0000:00/0000:00:14.0/usb3/3-2
N: bus/usb/003/002
E: BUSNUM=003
E: DEVNAME=/dev/bus/usb/003/002
E: DEVNUM=002
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-2
E: DEVTYPE=usb_device
E: DRIVER=usb
E: ID_BUS=usb
E: ID_MODEL=6362
E: ID_MODEL_ENC=6362
E: ID_MODEL_FROM_DATABASE=Flash Card Reader/Writer
E: ID_MODEL_ID=6362
E: ID_REVISION=0100
E: ID_SERIAL=058f_6362
E: ID_USB_INTERFACES=:080650:
E: ID_VENDOR=058f
...
# udevadm info -a /sys/devices/pci0000\:00/0000\:00\:14.0/usb3/3-2/

Udevadm info 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 '/devices/pci0000:00/0000:00:14.0/usb3/3-2':
    KERNEL=="3-2"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ATTR{authorized}=="1"
    ATTR{avoid_reset_quirk}=="0"
    ATTR{bConfigurationValue}=="1"
    ATTR{bDeviceClass}=="00"
    ATTR{bDeviceProtocol}=="00"
    ATTR{bDeviceSubClass}=="00"
    ATTR{bMaxPacketSize0}=="64"
    ATTR{bMaxPower}=="100mA"
    ATTR{bNumConfigurations}=="1"
    ATTR{bNumInterfaces}==" 1"
    ATTR{bcdDevice}=="0100"
    ATTR{bmAttributes}=="80"
    ATTR{busnum}=="3"
    ATTR{configuration}==""
    ATTR{devnum}=="2"
    ATTR{devpath}=="2"
    ATTR{idProduct}=="6362"
    ATTR{idVendor}=="058f"
    ATTR{ltm_capable}=="no"
    ATTR{maxchild}=="0"
    ATTR{quirks}=="0x0"
    ATTR{removable}=="removable"
    ATTR{speed}=="480"
    ATTR{urbnum}=="11845"
    ATTR{version}==" 2.00"

 

Seitenanfang

uDev Attribute

Attribut Beispiel Beschreibung
ACTION ACTION=="add" Event Typen add, change oder remove
ATTR ATTR{serial}=="0815" vergleicht den Inhalt einer Datei im SysFS Path des Devices
ATTRS ATTRS{serial}=="0815" wie ATTR, sucht auch in übergeordneten Verzeichnissen
DRIVER DRIVER=="8139too" Name des Kernel Moduls SysFS Path des Devices
DRIVERS DRIVERS=="?*" wie DRIVER, sucht auch in übergeordneten Verzeichnissen
ENV ENV{COMMENT}=="" Vergleicht mit einer Variablen
KERNEL KERNEL=="event[0-9]" Kernel Device Bezeichnung
KERNELS KERNELS=="[0-9]*:*[0-9]" wie Kernel, sucht auch in übergeordneten Verzeichnissen
PROGRAM PROGRAM=="/bin/true" führt den Befehl aus, bei Rückgabewert 0 ist das Ereignis wahr
RESULT PROGRAM=="/bin/echo test", RESULT=="test" Ausgabe des zuvor ausgeführten Proramms wird verglichen
SUBSYSTEM SUBSYSTEM=="pcmcia" Kernel-Subsystem das das Event auslöst
SUBSYSTEMS SUBSYSTEMS=="usb" wie SUBSYSTEM, sucht auch in übergeordneten Verzeichnissen
TEST TEST=="/var/run/network/initialized" prüft ob es die angegebene Datei gibt
Aktionsattribute Beispiel Beschreibung
ATTR ATTR{queue/read_ahead_kb}="256" schreibt den Wert in die angegebene SysFS Datei
ENV ENV{libsane_matched}="yes" exportiert die Variable mit diesem Wert ins Environment
GROUP GROUP="audio" setzt die Gruppe die auf das Device zugreifen darf
MODE MODE="660" Zugriffsrechte für das Device setzen
NAME NAME="capi20" Name des Device festlegen
OWNER OWNER="lp" Eigentümer des Device
OPTIONS OPTIONS="ignore_device" Optionen für das Device
RUN RUN+="/sbin/modprobe ..." führt Befehl aus ohne auf Rückgabewert zu achten
SYMLINK SYMLINK+="libmtp-%k" legt einen Symbolischen Link mit den angegebenen Namen an, der auf das Device verweist

Operatoren

Vergleiche im Bedingungsteil der Regel
== gleich
!= ungleich
Attribute zuweisen
= zuweisen
:= schreibgeschützt
+= mehrere Werte zuweisen
Seitenanfang

uDev Variablen

Variable Beschreibung
%E{...}, $env{...} Inhalt der angegebenen Umgebungsvariable
%M, $major Major Device Nummer des Geräts
%N, $tempnode temporärer Device Node des Geräts
%P, $parent Device Node des übergeordneten Geräts
%S, $sys Mountpoint von Sys
%b, $id Name des übergeordneten Device/Busses
%c, $result Ausgabe des letzten Programmaufrufes
%d, $driver Treiber Name
%k, $kernel Device-Bezeichnung des Kernels
%m, $minor Minor Device Nummer des Gerätes
%n, $number Nummer der Kernel Device Bezeichnung z.B. 1 bei sda
%p, $devpath Device Path des aktuellen Gerätes
%r, $root RootVerzeichnis von uDev
%s{..}, $attr{..} Inhalt der angegebenen Sysfs Datei
Seitenanfang

Befehle

Programme Beschreibung
ata_id Stellt Udev eine einmalige Beschreibung und weitere Informationen (uuid, label) für ein ATA-Laufwerk zur Verfügung.
cdrom_id Stellt Udev die Geräteeigenschaften von CD-Rom- und DVD-ROM-Laufwerken zur Verfügung.
create_floppy_devices Erstellt alle möglichen Diskettenlaufwerks-Gerätedateien basierend auf dem CMOS-Typ.
edd_id Stellt Udev die EDD-ID für ein BIOS-Laufwerk zur Verfügung.
firmware.sh Lädt Firmware in angeschlossene Geräte.
path_id Stellt den kürzesten einmaligen Pfad zu einer Hardware zur Verfügung.
scsi_id Stellt Udev einen einmaligen SCSI-Bezeichner zur Verfügung. Dieser basiert auf dem Rückgabewert einer SCSI-INQUIRY-Anfrage an das angegebene Gerät.
udevcontrol Stellt einige Parameter zum Ausführen des udevd-Daemon ein. Dazu gehört z.B. die Protokollierstufe.
udevd Dieser Daemon wacht über uevents an einem netlink-Socket, erzeugt Geräte-Dateien und führt bestimmte externe Programme als Reaktion auf diese uevents aus.
udevinfo Ermöglicht Anwendern, die Udev-Datenbank nach Informationen über die zur Zeit verfügbare Geräte im System abzufragen. Es stellt außerdem eine Möglichkeit dar, jedes Gerät im sysfs-Dateisystem abzufragen, um beim Erzeugen von udev-Regeln behilflich zu sein.
udevmonitor Zeigt die vom Kernel erhaltenen Ereignisse und die von Udev erzeugte Reaktion darauf an, nachdem eine Regel abgearbeitet wurde.
udevsettle Überwacht die Warteschlange der Udev-Ereignisse und beendet sich, wenn alle wartenden Ereignisse abgearbeitet wurden.
udevtest Simuliert ein Udev-Ereignis für das angegebene Gerät und gibt den Namen der Gerätedatei oder der Netzwerkschnittstelle aus, die ein echter udev-Aufruf für dieses Gerät erzeugt hätte.
udevtrigger Sorgt für eine Wiederholung der Kernel-Geräte-Ereignisse.
usb_id Stellt Udev Informationen zu USB-Geräten zur Verfügung.
vol_id Stellt Udev label und uuid eines Dateisystems zur Verfügung.
write_cd_rules Dieses Skript erzeugt Udev-Regeln, die stabile Namen für optische Laufwerke unterstützen (siehe auch Abschnitt 7.12, „Erzeugen von benutzerdefinierten symbolischen Links zu Geräten“).
write_net_rules Dieses Skript erzeugt Udev-Regeln, die stabile Namen für Netzwerkschnittstellen unterstützen (siehe auch Abschnitt 7.13, „Einrichten des network-Skripts“).
Bibliotheken Beschreibung
libudev Eine Schnittstellen-Bibliothek zu Udev-Geräteinformationen.
libvolume_id Eine Schnittstellen-Bibliothek zum Auslesen von Volumen-Kennungen (labels) und uuids.
Beispiele Beschreibung
lsusb -v Infos zu eingesteckten USB Geräten anzeigen
lsusb -t USB Device in Baumansicht
lsusb -d 046d:c52b USB Geräte -d mit Angabe der Vendor:Product Nummer
udevadm info /sys/class/net/eth0/ Info zum Device
udevadm info -a -n /dev/ttyACM0 Info zum Device -n über den DeviceName
udevadm info -a -p /sys/block/sda Info zum Device -p über SysPath
udevadm info -q path -n /dev/sda SysPath des Device anzeigen
udevadm monitor Default, zeigt vom Kernel Uevents und udev Events an (-k -u)
udevadm monitor --property Erweiterte Ausgabe vom Kernel Uevents und udev Events (-p)
udevadm control --reload-rules udev Regeln neu einlesen
udevadm control log_priority=<level> Log Level des Daemons ändern (temporär)
udevadm test $(udevadm info -q path -n <device>) Regeln testen

- mit udevadm testen, welche Regeln zur Anwendung kommen

udevadm test $(udevadm info -q path -n /dev/ttyACM0)
calling: test
version 229
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

=== trie on-disk ===
tool version:          229
file size:         7058303 bytes
header size             80 bytes
strings            1762191 bytes
nodes              5296032 bytes
Load module index
timestamp of '/etc/systemd/network' changed
timestamp of '/lib/systemd/network' changed
Parsed configuration file /lib/systemd/network/99-default.link
Created link configuration context.
timestamp of '/etc/udev/rules.d' changed
Reading rules file: /lib/udev/rules.d/39-usbmuxd.rules
Reading rules file: /lib/udev/rules.d/40-bridge-network-interface.rules
Reading rules file: /lib/udev/rules.d/40-crda.rules
...
GROUP 20 /lib/udev/rules.d/50-udev-default.rules:26
IMPORT builtin 'hwdb' /lib/udev/rules.d/60-serial.rules:7
IMPORT builtin 'usb_id' /lib/udev/rules.d/60-serial.rules:8
...
udevadm test $(udevadm info -q path -n /dev/ttyACM0) 2>&1 | \
sed -n 's/.* \(\/[^ ]*\)\.rules:\([0-9]\+\)/\1.rules \2/p' | \
while read -r f n; do printf "%03d:%-50s " $n "$f"; sed -n ${n}p $f; done 026:/lib/udev/rules.d/50-udev-default.rules KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" 007:/lib/udev/rules.d/60-serial.rules SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci" 008:/lib/udev/rules.d/60-serial.rules SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" 008:/lib/udev/rules.d/60-serial.rules SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" 015:/lib/udev/rules.d/60-serial.rules IMPORT{builtin}="path_id" 016:/lib/udev/rules.d/60-serial.rules ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="", SYMLINK+="serial/by-path/$env{ID_PATH}" 019:/lib/udev/rules.d/60-serial.rules IMPORT{builtin}="usb_id" 023:/lib/udev/rules.d/60-serial.rules ENV{.ID_PORT}=="", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}"

 

 

Seitenanfang

uDev sonstiges

USB - RS232 Konverter

- ggf Kernel Module temporär nachladen, im Beispiel mit Angabe von Vendor und Produkt ID

modprobe usbserial
modprobe -v ftdi_sio vendor=0x1234 product=0x1234 debug modprobe -v mct_u232 vendor=0x050d product=0x0109

- Kernelmodule permanent laden, in der modules.conf können noch Parameter mitgegeben werden

# /etc/modules-load.d/modules.conf oder /etc/modules
...
usbserial
ftdi_sio
pl2303
mct_u232
# /etc/modules-load.d/modules.conf
mct_u232 options 'mct_u232' vendor=0x050d product=0x0109

- wenn im Modul kein Alias für die Hardware definiert ist, kann er wie folgt übergeben werden

echo "050d 0109" > /sys/bus/usb-serial/drivers/mct_u232/new_id

im Modul hinterlegten aliase von Vendor und Produkt anzeigen

modinfo mct_u232
modprobe -c | grep -i "usbserial"
Befehl

Beschreibung

lsusb USB-Device als List ausgeben
lsusb -t als Baumansicht
usb-devices | grep 050d  
ls -Al /dev/tty[A,U]* USB Device anzeigen
   

 

Seitenanfang

sonstiges