Homepage Wiki Forum Buy

SpecialDeviceFiles

Aus GNUBLIN

Inhaltsverzeichnis

Fehlende Special Device Files erzeugen ELDK

Allgemein

Im Gnublin root file system sind im /dev Verzeichnis unter Umständen nicht alle "special device files" vorhanden, die man für die Kommunikation mit den Kernel Treibern braucht. User space Programme, d.h. solche, die man z.B. an der Kommandozeile ausführt, benutzen "special device files" um mit Kernel Treibern zu kommunizieren. Wenn gewünschte device files nicht vorhanden sind, muss man sie bei Gnublin Linux von Hand anlegen - sie werden nicht automatisch erzeugt. Man braucht dazu das bei Gnublin bereits installierte Programm "mknod" und muss über den Device Typ ("character" oder "block") und die device Nummern Bescheid wissen. Die erhält man entweder aus dem Source code der Kernel Treiber (aufwändig) oder man muss sie irgendwo von einem Linux Sytem abgucken.


Zum Beispiel könnten folgende special device files nützlich sein:

crw-r--r-- 1 root root 89, 0 Sep 27 2011 i2c-0 crw-r--r-- 1 root root 89, 1 Sep 27 2011 i2c-1 brw-r--r-- 1 root root 179, 0 Sep 27 2011 mmcblk0 brw-r--r-- 1 root root 179, 1 Sep 27 2011 mmcblk0p1 brw-r--r-- 1 root root 179, 2 Sep 27 2011 mmcblk0p2 brw-r--r-- 1 root root 8, 0 Mar 23 11:17 sda brw-r--r-- 1 root root 8, 1 Mar 23 11:17 sda1 brw-r--r-- 1 root root 1, 5 Apr 21 00:28 zero

Durchführung

"i2c-0" ist auf dem Gnublin board nicht angeschlossen - das braucht man eigentlich nicht. "i2c-1" wird möglicherweise benötigt, wenn man auf I2C Geräte über User Space Programme zugreifen will. Die "mmcblk*" braucht man für den Zugriff auf die Partitionen der SD Karte. Im Normalfall also nicht unbedingt. "sda" und "sda1" werden benötigt, falls man auf einen USB Stick zugreifen will. Das erste Zeichen "c" bzw. "b" in der Zeile zeigt an, ob das device file für ein character (==zeichenbasiertes) oder ein block (==blockbasiertes) device steht. Man erzeugt die obigen devices also folgendermaßen:


root@gnublin:~$ cd /dev root@gnublin:/dev$ mknod i2c-0 c 89 0 root@gnublin:/dev$ mknod i2c-1 c 89 1 root@gnublin:/dev$ mknod mmcblk0 b 179 0 root@gnublin:/dev$ mknod mmcblk0p1 b 179 1 root@gnublin:/dev$ mknod mmcblk0p2 b 179 2 root@gnublin:/dev$ mknod sda b 8 0 root@gnublin:/dev$ mknod sda b 8 1 root@gnublin:/dev$ mknod zero c 1 5

Ergebnis

Wenn die entsprechenden Geräte angeschlossen und die die benötigten Programme installiert sind, kann man anschließend darauf zugreifen. Folgendes Beispiel zeigt anhand einem I2C Gerät (Temperatur-Baustein LM75) wie man vorgeht, falls ein "/dev/..." special device file fehlt.

root@gnublin:~$ i2cget -y 1 0x48 0 w Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory root@gnublin:~$ mknod /dev/i2c-1 c 89 1 root@gnublin:~$ i2cget -y 1 0x48 0 w 0xc016

Der folgende "fdisk" Befehl zeigt das Ergebnis aussieht, wenn das /dev/sda special device file bereits korrekt angelegt worden ist und ein USB Stick am Gnublin board angeschlossen ist:

root@gnublin:~$ fdisk -l /dev/sda Disk /dev/sda: 2004 MB, 2004877312 bytes 62 heads, 62 sectors/track, 1018 cylinders Units = cylinders of 3844 * 512 = 1968128 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xc3072e18 Device Boot Start End Blocks Id System /dev/sda1 3 1018 1952752 83 Linux /dev/sda2 1 2 2820 df BootIt Partition table entries are not in disk order root@gnublin:~$
In anderen Sprachen