Der Text hier bezieht auf das Board mit dem Originalkernel im Auslieferungszustand, also eine Art „Quickstarting with I²C“.
Das Problem war, dass er zwar das I²C-„Host-Device“ erkannt hat, aber keine /dev-Node erstellt hat und wenn ich diese von Hand erstellt habe, dann gings nicht.
Die Lösung liegt darin, die Treiber in der richtigen Reihenfolge zu laden.
$ modprobe i2c-atmeltwi $ modprobe i2c-core $ modprobe i2c-devNun kann man nachsehen, ob das I²C-/dev-Gerät erstellt worden ist:
$ ls -al /dev/i2c* crw-r--r-- 1 root root 89, 0 Dec 31 2006 /dev/i2c-0Sollte dabei nichts herauskommen, kann man die Device-Node von Hand anlegen:
$ mknod /dev/i2c-0 89 0 bNun kann man z.B. so den Bus durchsuchen lassen:
$ ./i2cdetect -y -r 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --Bei mir sind zu dem Zeitpunkt die Adressen $28 und $44 belegt gewesen, ein MAX127 AD-Wandler und ein MAX6956 20-Port LED Treiber/IO-Expander. i2cdetect ist ein Teil von i2ctools und leider nicht von Haus aus auf dem Board. Ich habe es übersetzt, eingetütet und ihr könnt es hier herunterladen. Auf dem Board entpacken und ausführen. Um die Treiber und die Device-Node automatisch laden und anlegen zu lassen, muss man den „autostart“ des Board ein wenig bearbeiten:
$ vi /etc/rc.d/S50i2c.sh „i“ drücken (starten des eingabe modus) #!/bin/sh case "$1" in start|"") echo Starting i2c driver modprobe i2c-atmeltwi modprobe i2c-core modprobe i2c-dev mknod /dev/i2c-0 89 0 c ;; stop) ;; *) echo "Usage: $0 [start|stop]" exit 255 ;; esac return 0 :wq tippen (beenden von vi und speichern) $ chmod +x /etc/rc.d/S50i2cAb jetzt wird bei jedem Neustart der Treiber automatisch richtig geladen.