Startseite
  • Registrieren

Raspi Colour R SMit Einführung des Kernels 3.18.3 wird nun auch das für Linux (im Linux-Kernel-Handbuch) empfohlene Device-Model (Gerätemodel) für den Raspberry Pi genutzt. Dies ist eine Umsetzung der so genannten objektorientierten Programmierung (ooP), wodurch sich, richtig angewendet, sowohl die Effektivität der Programmierung erhöhen lässt, als auch die Verständlichkeit des Codes verbessert wird. Geräte werden Klassen zugeordnet und können angesprochen werden, ohne ihren genauen physischen Aufbau zu kennen. Der Kernel kann nun durch einen Gerätebaum (device tree) effektiv ergänzt werden, ohne dabei den Kernel selbst verändern zu müssen. Das embedded Linux des Arietta G25 Boards nutzt diese Technik ebenfalls. Sie ist also nicht auf den Raspberry Pi beschränkt sondern der Standard bei komplexen Geräten, welche z.B. die SoC-Technologie (System on a Chip) nutzen. Ich möchte hier am Beispiel des Raspberry Pi und des Betriebssystem Raspian die Nutzung des device tree erläutern. Dabei greife ich auf die readme-Datei auf der Bootpartition und auf die Dokumentation für den Raspberry Pi zurück.

 

Der Gerätebaum (device tree)

Der device tree, abgekürzt auch DT, wird beim Raspberry Pi in der /boot/config.txt angesprochen. Der DT ist bei Raspbian standardmäßig aktiviert. Um Geräte auf die bisherige Weise, also über das Laden von Modulen und das Aktivieren über das Auskommentieren in der Blacklist nutzen zu können, ist es möglich, jedoch nicht empfohlen den DT zu deaktivieren. Dazu ist in der /boot/config.txt folgende Zeile anzugeben.

device_tree=

Nach jeder Änderung der Datei ist ein Neustart erforderlich, um diese wirksam werden zu lassen.

 

Geräte aktivieren

Der device tree dient grundsätzlich dazu, dass Geräte, welche DT unterstützen, in der Lage sind, beim Startvorgang des Betriebssystems erkannt zu werden und die Treiber automatisch geladen werden. In den Spezifikationen für Erweiterungen für die "+"-Modelle des Raspberry Pi wie z.B. neue Austeckplatinen als HAT (Hardware on Top), ist dazu ein EEPROM vorgesehen, der die entsprechenden Informationen enthält, um den DT zu steuern. Fehlen diese Informationen kann man Geräte auch manuell in der /boot/config.txt aktivieren. Dazu gibt es auf der Bootpartition einige Dateien, die die Informationen für die jeweiligen Standardgeräte beinhalten. Die Informationen werden in einem C-ähnlichen Format als so genannte Device Tree Sources (.dts) bereitgestellt. Kompiliert und damit nutzbar werden sie als Device Tree Blob bezeichnet und haben die Dateiendung .dtb. Soll ein Gerät aktiviert werden müssen diese Daten in den Arbeitsspeicher geladen werden.

Standardmäßig sind z.B. die optionalen Schnittstellen wie I²C, I²S und SPI. Befindet sich kein EEPROM mit den notwendigen Informationen auf der Erweiterung kann man diese Schnittstellen manuell mit der Richtlinie dtparam aktivieren.

dtparam=i2c=on  #aktiviert die I²C-Schnittstelle

dtparam=i2s=on #aktiviert die I²S-Schnittstelle

dtparam=spi=on #aktiviert die SPI-Schnittstelle

 


Überlagerungen (overlays)

Overlays werden mit der "dtoverlay"-Richtlinie geladen. Als Beispiel nutze ich hier das für (IR)-Fernbedienungen benötigte lirc-pi Modul. Durch folgenden Eintrag in der config.txt wird das Modul mit seinen Standardeinstellungen geladen.

dtoverlay=lirc-rpi

Die Datei /boot/overlays/lirc-rpi-overlay.dtb wird in den Speicher geladen und das Modul ist dadurch verfügbar. Standardmäßig liegt nun auf Pin 17 der Ausgang und auf Pin 18 der Eingang für eine Fernbedienung. Jetz kommt ein weiterer Vorteil vom DT zur Geltung. Über Parameter können die Pins geändert werden.

dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=13

sorgt z.B. dafür, dass die Ausgabe über den Pin 13 erfolgt. Die Benutzung von Parametern kann auch bei anderen Overlays genutzt werden.

 

Parameterreferenz für Overlays

(Übersetzung in Bearbeitung)


File:   <The base DTB>
Info:   Describes the base Raspberry Pi hardware
Load:   <loaded automatically>
Params:
        i2c_arm (default "off")  Set to "on" to enable the ARM's i2c interface
        i2c_vc (default "off")     Set to "on" to enable the i2c interface usually reserved for the VideoCore processor
        i2c                              An alias for i2c_arm
        i2s (default "off")          Set to "on" to enable the i2s interface
        spi (default "off")          Set to "on" to enable the spi interfaces
        act_led_trigger (default "mmc")
                                 Choose which activity the LED tracks.
                                 Use "heartbeat" for a nice load indicator.
        act_led_activelow (default "off")
                                 Set to "on" to invert the sense of the LED
        act_led_gpio (default "16" on a non-Plus board, "47" on a Plus)
                                 Set which GPIO pin to use for the activity LED
                                 (in case you want to connect it to an external
                                 device)

Es wird empfohlen, nur die Schnittstellen und Treiber zu laden, die gebraucht werden, da sich je nach Revision und Version des Raspberry Pi einige davon gegenseitig behindern können.
       

File:   hifiberry-amp-overlay.dtb
Info:   Describes the HifiBerry Amp and Amp+ audio cards
Load:   dtoverlay=hifiberry-amp
Params: <None>

File:   hifiberry-dac-overlay.dtb
Info:   Describes the HifiBerry DAC audio card
Load:   dtoverlay=hifiberry-dac
Params: <None>


File:   hifiberry-dacplus-overlay.dtb
Info:   Describes the HifiBerry DAC+ audio card
Load:   dtoverlay=hifiberry-dacplus
Params: <None>


File:   hifiberry-digi-overlay.dtb
Info:   Describes the HifiBerry Digi audio card
Load:   dtoverlay=hifiberry-digi
Params: <None>


File:   iqaudio-dac-overlay.dtb
Info:   Describes the IQaudio DAC audio card
Load:   dtoverlay=iqaudio-dac
Params: <None>


File:   iqaudio-dacplus-overlay.dtb
Info:   Describes the IQaudio DAC+ audio card
Load:   dtoverlay=iqaudio-dacplus
Params: <None>


File:   lirc-rpi-overlay.dtb
Info:   Configures lirc-rpi (Linux Infrared Remote Control for Raspberry Pi)
        Consult the module documentation for more details.
Load:   dtoverlay=lirc-rpi,<param>=<val>,...
Params: gpio_out_pin (default "17")   GPIO pin for output
        gpio_in_pin (default "18")    GPIO pin for input
        gpio_in_pull (default "down") Pull up/down/off on the input pin
        sense (defaults to "-1")      Override the IR receive auto-detection
                                      logic:
                                      "1" = force active high
                                      "0" = force active low
                                      "-1" = use auto-detection
        softcarrier (default "on")    Turn the software carrier "on" or "off".
        invert (default "off")        "on" = invert the output pin.
        debug (default "off")         "on" = enable additional debug messages.


File:   pfc8523-rtc-overlay.dtb
Info:   Configures the pfc8523 Real Time Clock
Load:   dtoverlay=pfc8523-rtc
Params: <none>


File:   pps-gpio-overlay.dtb
Info:   Configures the pps-gpio (pulse-per-second time signal via GPIO).
Load:   dtoverlay=pps-gpio,<param>=<val>
Params: gpiopin (default "18")        GPIO input pin


File:   w1-gpio-overlay.dtb
Info:   Configures the w1-gpio Onewire interface module.
        Use this overlay if you *don't* need a pin to drive an external pullup.
        N.B. The parasitic power feature is not yet functional using DT.
Load:   dtoverlay=w1-gpio,<param>=<val>
Params: gpiopin (default "4")         GPIO pin for I/O


File:   w1-gpio-pullup-overlay.dtb
Info:   Configures the w1-gpio Onewire interface module.
        Use this overlay if you *do* need a pin to drive an external pullup.
        N.B. The parasitic power feature is not yet functional using DT.
Load:   dtoverlay=w1-gpio-pullup,<param>=<val>,...
Params: gpiopin (default "4")         GPIO pin for I/O
        pullup  (default "5")         GPIO pin for external pullup

 

Fehlerbehebung

Treten Probleme bei der Verwendung des DT auf kann durch folgenden Eintrag in die  /boot/config.txt ein Protokoll erstellt werden:

dtdebug=on

Nach einem Neustart kann das Protokoll mit

sudo vcdbg log msg

aufgerufen werden.

Weiterführende Literatur

Dies soll nur eine kurze Einführung in das Thema des DT auf dem Raspberry Pi sein. Eine ausführliche englische Beschreibung findet Ihr unter folgendem Link:

http://www.raspberrypi.org/documentation/configuration/device-tree.md

Habt Ihr weiter Fragen, scheut Euch nicht, die im Forum zu stellen!

Kommentare   

+2 #5 Jörg Neumann 2015-06-08 17:52
zitiere Paul:
Hallo Jörg,
bei Verwendung von dtoverlay=w1-gpio
wird dann auch noch die Datei etc/modprobe.d/1-wire.conf berücksichtig, mit dem Inhalt:
options wire max_slave_count=20

Versuch mal eine Frage immer nur an einer Stelle zu stellen. Ich muss mal sehen, ob es dafür nun in DT einen Parameter gibt. Ich check das mal ab.
Zitieren
0 #4 Paul 2015-06-08 15:50
Hallo Jörg,
bei Verwendung von dtoverlay=w1-gpio
wird dann auch noch die Datei etc/modprobe.d/ 1-wire.conf berücksichtig, mit dem Inhalt:
options wire max_slave_count =20
Zitieren
0 #3 Martin 2015-02-09 09:48
Hallo,
herzlichen Dank für Deine Mühe.
Ich hatte am 5.2.2015 das upgrade/update gefahren und genau ab diesem Zeitpunkt das Problem mit dem w1. Nach Deiner Anweisung funktioniert es wieder.
Nochmals Danke.
Gruß
Martin
Zitieren
0 #2 Jörg Neumann 2015-02-04 21:24
zitiere homeum:

dtoverlay=w1-gpio-pullup-overlay
... damit die Sensoren (mit Pullup-R) auch arbeiten?
Sehe ich das richtig?


Nicht ganz. Bei dem Overlay wird ein extra Pin für den Pullup genutzt.
Wenn der Pullup am gleichen Pin wie der Sensor, also wie bisher betrieben wird ist das "normale" Overlay angesagt:
dtoverlay=w1-gpio
Zitieren
0 #1 homeum 2015-02-04 18:35
Hallo,

als RPi-Einsteiger bin ich heute nach dem update über meine inaktiven W1-Sensoren gestolpert und auf deine Beiträge gestoßen.
Als Erstmaßnahme habe ich über raspi-config DT deaktiviert und W1 funktioniert zunächst wieder.

Wenn ich das hier aber alles richtig verstehe, kann ich aber DT aktiv lassen, wenn ich dann in /boot/config.tx t den Eintrag

dtoverlay=w1-gpio-pullup-overlay

hinzufüge, damit die Sensoren (mit Pullup-R) auch arbeiten?
Sehe ich das richtig?
Zitieren

Produkte finden!


Erweiterte Suche

Besucherzahlen

Heute160
Gestern1028
Diese Woche6718
Diesen Monat22822
Total31333979

Visitor Info

  • Besucher IP : 54.80.10.56
  • Browser: Unknown
  • Browser Version:
  • Operating System: Unknown

Wer ist Online

9
Online

Sonntag, 22. Oktober 2017 06:47

RapidSSL SEAL 90x50

Warenkorb

0 Produkte - 0,00 EUR
Zum Warenkorb

Deutsches Raspberry Pi Forum

Neue Produkte

Acrylgehäuse NanoPi NEO AIR (Artikelnummer: GEHNANOPINEOAIR)
5,50 EUR
3D Druck Gehäuse NanoPi NEO (Artikelnummer: GEHNANOPINEO)
4,50 EUR
NanoHat Proto (Artikelnummer: NANOHATPROTO)
7,45 EUR
NanoHat PCM5102A (Artikelnummer: NANOHATPCM)
10,99 EUR
NanoPi NEO Air inkl. Kühlkörper (Artikelnummer: nanopiair)
28,95 EUR