Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Eingebettete Linux-Gerätetreiber:Ihre Rolle verstehen

Anmerkung des Herausgebers:Embedded Linux gehört zu den führenden Betriebssystemen, die beim Design eingebetteter Systeme verwendet werden. Angesichts des rasch wachsenden Interesses am Internet der Dinge (IoT) wird sich die Fähigkeit von Embedded Linux, mehrere Rollen zu erfüllen, als entscheidend erweisen, um die unterschiedlichen Anforderungen auf jeder Ebene der IoT-Anwendungshierarchie zu erfüllen. Die Fähigkeit von Ingenieuren, eingebettete Linux-Systeme zu beherrschen, wird wiederum entscheidend für die schnelle und zuverlässige Entwicklung komplexerer Systeme. In Mastering Embedded Linux Programming – Second Edition nimmt der Autor Chris Simmonds den Leser mit auf eine detaillierte Tour durch die Breite und Tiefe dieses wichtigen Betriebssystems und verwendet detaillierte Beispiele, um jeden wichtigen Punkt zu veranschaulichen.

In diesem Auszug, Kapitel 9, des Buches, beschreibt der Autor, wie Kernel-Gerätetreiber mit der Systemhardware interagieren und wie Entwickler Gerätetreiber schreiben und in ihren Anwendungen verwenden können. Die folgenden Teile enthalten diesen Auszug über Embedded Linux-Gerätetreiber:

• Ihre Rolle verstehen

• Treiberstatus zur Laufzeit lesen

• Gerätetreiber im Benutzerbereich

• Einen Kernel-Gerätetreiber schreiben

• Ermitteln der Hardwarekonfiguration

Angepasst von Eingebettete Linux-Programmierung beherrschen – Zweite Ausgabe, von Chris Simmonds.

Kapitel 9. Schnittstellen zu Gerätetreibern

Kernel-Gerätetreiber sind der Mechanismus, durch den die zugrunde liegende Hardware dem Rest des Systems ausgesetzt wird. Als Entwickler von eingebetteten Systemen müssen Sie wissen, wie sich diese Gerätetreiber in die Gesamtarchitektur einfügen und wie Sie von User-Space-Programmen darauf zugreifen können. Ihr System wird wahrscheinlich über einige neuartige Hardware verfügen, und Sie müssen einen Weg finden, auf sie zuzugreifen. In vielen Fällen werden Sie feststellen, dass Ihnen Gerätetreiber zur Verfügung gestellt werden, und Sie können alles erreichen, was Sie wollen, ohne Kernel-Code schreiben zu müssen. Sie können beispielsweise GPIO-Pins und -LEDs mithilfe von Dateien in sysfs manipulieren, und es gibt Bibliotheken für den Zugriff auf serielle Busse, einschließlich SPI (Serial Peripheral Interface) und ich 2 C (Inter-Integrated Circuit).

Es gibt viele Orte, an denen Sie erfahren können, wie Sie einen Gerätetreiber schreiben, aber nur wenige, die Ihnen sagen, warum Sie dies möchten und welche Möglichkeiten Sie dabei haben. Das ist es, was ich hier abdecken möchte. Denken Sie jedoch daran, dass dies kein Buch ist, das sich dem Schreiben von Kernel-Gerätetreibern widmet, und dass die hier gegebenen Informationen Ihnen helfen, sich in diesem Gebiet zurechtzufinden, aber nicht unbedingt, um dort zu Hause einzurichten. Es gibt viele gute Bücher und Artikel, die Ihnen beim Schreiben von Gerätetreibern helfen, von denen einige am Ende dieses Kapitels aufgeführt sind.

In diesem Kapitel werden wir die folgenden Themen behandeln:

Die Rolle der Gerätetreiber

Wie ich in Kapitel 4 erwähnt habe, Konfigurieren und Erstellen des Kernels , besteht eine der Funktionen des Kernels darin, die vielen Hardware-Schnittstellen eines Computersystems zu kapseln und sie Benutzer-Space-Programmen auf konsistente Weise zu präsentieren. Der Kernel verfügt über Frameworks, die das Schreiben eines Gerätetreibers erleichtern sollen, dh der Code, der zwischen dem oberen Kernel und der darunter liegenden Hardware vermittelt. Ein Gerätetreiber kann geschrieben werden, um physische Geräte wie einen UART oder einen MMC-Controller zu steuern, oder er kann ein virtuelles Gerät wie das Nullgerät ( /dev/null ) oder eine Ramdisk darstellen. Ein Fahrer kann mehrere Geräte desselben Typs steuern.

Der Code des Kernel-Gerätetreibers wird auf einer hohen Berechtigungsebene ausgeführt, ebenso wie der Rest des Kernels. Es hat vollen Zugriff auf den Adressraum und die Hardwareregister des Prozessors. Es kann Interrupts und DMA-Transfers verarbeiten. Es kann die ausgereifte Kernel-Infrastruktur für die Synchronisation und das Speichermanagement nutzen. Sie sollten sich jedoch bewusst sein, dass dies einen Nachteil hat; Wenn bei einem fehlerhaften Treiber etwas schief geht, kann es wirklich schief gehen und das System zum Absturz bringen. Folglich gibt es den Grundsatz, dass Gerätetreiber so einfach wie möglich sein sollten, indem sie nur den Anwendungen Informationen zur Verfügung stellen, in denen die wirklichen Entscheidungen getroffen werden. Sie hören oft, dass dies als keine Richtlinie im Kernel ausgedrückt wird . Es liegt in der Verantwortung des Benutzerbereichs, die Richtlinie festzulegen, die das Gesamtverhalten des Systems regelt. Das Laden von Kernelmodulen als Reaktion auf externe Ereignisse wie das Anschließen eines neuen USB-Geräts liegt beispielsweise in der Verantwortung des User-Space-Programms udev , nicht des Kernels. Der Kernel bietet lediglich eine Möglichkeit zum Laden eines Kernelmoduls.

Unter Linux gibt es drei Haupttypen von Gerätetreibern:

Es gibt auch einen vierten Typ, der sich als Gruppe von Dateien in einem der Pseudo-Dateisysteme präsentiert. Sie können beispielsweise über eine Gruppe von Dateien in /sys/class/gpio auf den GPIO-Treiber zugreifen, wie ich später in diesem Kapitel beschreiben werde. Schauen wir uns zunächst die drei grundlegenden Gerätetypen genauer an.

Charaktergeräte

Zeichengeräte werden im Benutzerbereich durch eine spezielle Datei namens Geräteknoten identified identifiziert . Dieser Dateiname wird einem Gerätetreiber unter Verwendung der ihm zugeordneten Major- und Minor-Nummern zugeordnet. Im Großen und Ganzen die wichtigste Zahl ordnet den Geräteknoten einem bestimmten Gerätetreiber zu und die Nebennummer teilt dem Treiber mit, auf welche Schnittstelle zugegriffen wird. Der Geräteknoten des ersten seriellen Ports auf dem ARM Versatile PB heißt beispielsweise /dev/ttyAMA0 und hat die Major-Nummer 204 und die Minor-Nummer 64. Der Geräteknoten für den zweiten seriellen Port hat dieselbe Major-Nummer, da er wird vom gleichen Gerätetreiber verarbeitet, aber die Minor-Nummer ist 65. Wir können die Nummern für alle vier seriellen Ports aus der Verzeichnisliste hier sehen:

# ls -l /dev/ttyAMA*crw-rw---- 1 Root Root 204, 64 1. Jan 1970 /dev/ttyAMA0crw-rw---- 1 Root Root 204, 65 1. Jan 1970 /dev/ ttyAMA1crw-rw---- 1 Root Root 204, 66 1. Jan 1970 /dev/ttyAMA2crw-rw---- 1 Root Root 204, 67 1. Jan 1970 /dev/ttyAMA3

Die Liste der standardmäßigen Major- und Minor-Nummern finden Sie in der Kernel-Dokumentation in Documentation/devices.txt . Die Liste wird nicht sehr oft aktualisiert und enthält nicht das im vorherigen Absatz beschriebene ttyAMA-Gerät. Wenn Sie sich jedoch den Kernel-Quellcode in driver/tty/serial/amba-pl011.c ansehen, sehen Sie, wo die Major- und Minor-Nummern deklariert sind:

 #define SERIAL_AMBA_MAJOR 204 #define SERIAL_AMBA_MINOR 64

Wenn es mehr als eine Instanz eines Geräts gibt, wie beim ttyAMA-Treiber, besteht die Konvention zum Bilden des Namens des Geräteknotens darin, einen Basisnamen, ttyAMA, zu verwenden und in diesem Beispiel die Instanznummer von 0 bis 3 anzuhängen.

Wie ich in Kapitel 5 erwähnt habe, Ein Root-Dateisystem erstellen , können die Geräteknoten auf verschiedene Weise erstellt werden:

Sie haben vielleicht den Eindruck, dass die Zahlen, die ich oben verwendet habe, den Eindruck haben, dass sowohl Major- als auch Minor-Zahlen 8-Bit-Zahlen im Bereich von 0 bis 255 sind. Tatsächlich ist die Major-Zahl ab Linux 2.6 12 Bit lang, was gültige Zahlen ergibt von 1 bis 4.095, und die untergeordnete Zahl ist 20 Bit, von 0 bis 1.048.575.


Eingebettet

  1. Rolle eingebetteter Systeme in Automobilen
  2. Epoxys vielfältige Rolle bei der Leiterplattenherstellung von IoT-Geräten
  3. Schlüsseltechnologien stärken die wachsende Rolle von Embedded Vision
  4. OTA-Updates für Embedded Linux, Teil 2 – Ein Vergleich von Standard-Update-Systemen
  5. OTA-Updates für Embedded Linux, Teil 1 – Grundlagen und Implementierung
  6. Eingebettete Linux-Gerätetreiber:Erkennen der Hardwarekonfiguration
  7. Blog:Die Rolle von PDMS in der Mikrofluidik verstehen
  8. Vom IoT zum Cryptojacking:Neue Bedrohungen für Mobilgeräte verstehen
  9. Eine Einführung in das Hacken von eingebetteter IoT-Hardware
  10. Komponenten von CAM und ihre Rolle in der CNC-Bearbeitung