Linux -Gerätetreibermodell

Linux -Gerätetreibermodell

Im Allgemeinen benötigt jedes Betriebssystem eine Software, die für das Gerät spezifisch ist. Diese Software versteht die Gerätefunktionalität und ist eine mittlere Ebene zwischen Betriebssystem und Hardware. Der Gerätetreiber ist der Begriff, der für diese Software verwendet wird. In diesem Artikel werden wir darüber diskutieren, wie Linux die Geräte und Gerätefahrer umgeht. In einfachen Worten werden wir den Gerätetreiber -Framework von Linux untersuchen.

Beschreibung

In der Regel sind auf einer Platine oder einer Plattform mehrere Geräte vorhanden, und diese Geräte sind durch einige physische Linien oder Protokolle miteinander verbunden. Diese Verbindungsprotokolle sind als Busse bekannt. Es stehen mehrere Busprotokolle zur Verfügung. Nur wenige Beispiele sind I2C, SPI, AHB, APB, PCI usw. Nehmen wir ein Beispiel für das EEPROM -Speichergerät. EEPROM ist mit dem System mit dem I2C -Bus verbunden. CPU verwendet das I2C -Protokoll, um Daten von EEPROM zu lesen/zu schreiben. Von der CPU -Seite erfolgt diese Protokollbehandlung vom I2C -Protokollregler. I2C -Controller auf der CPU fungiert als Master -Gerät. EEPROM fungiert als Sklavengerät. Alle Details von I2C sind in der I2C -Spezifikation verfügbar.

In Linux -basierten ARM -Systemen werden EEPROM -Geräte mit Hilfe des Gerätebaums besiedelt. Das Definieren des EEPROM im Gerätebaum reicht aus, um das Gerät im System zu deklarieren. Mit dieser Gerätebaumeintrags -Geräteinstanz wird der Linux -Kernel während des Bootens erstellt. Wenn sich der Linux startet, analysiert es den Gerätebaum und erstellt die Instanz der im Gerätebaum definierten Geräte.

Mit diesem Gerät wird im Linux erstellt, aber Linux kann das Gerät nicht verstehen. Für die Gerätekommunikation/-operationen ist eine spezielle Software für Geräte erforderlich. Dies wird als Gerätetreiber für das Gerät bezeichnet. Wenn Sie zum EEPROM -Beispiel zurückkehren, wird der EEPROM -Geräte -Treiber benötigt, um die Daten aus dem EEPROM zu lesen/zu schreiben.

Um den Gerätetreiber an das spezifische Gerät zu binden, ist eine kompatible Zeichenfolge erforderlich. Die kompatible Zeichenfolge wird von Linux -Kernel verwendet, um den spezifischen Treiber während des Bootens auf das Gerät zu untersuchen. Linux -Kernel bietet auch die Flexibilität, dass ein Gerätetreiber zur Laufzeit geladen werden kann. Der einzige Zustand ist, dass der Treiber nicht erforderlich sein sollte, damit die Plattform starten kann. Gerätetreiber, die später dem Kernel hinzugefügt werden, werden als Kernel -Objekte zusammengestellt. Dies sind die vorhandenen Dateien als .ko. InsMOD -Befehl wird verwendet, um die Kernelobjekte auf dem laufenden Kernel hinzuzufügen.

Nachdem der Gerätetreiber mit dem Gerät untersucht wurde, kann das Gerät für die Vorgänge verwendet werden. EEPROM -Gerät kann gelesen/geschrieben werden, nachdem der EEPROM -Treiber im Linux -Kernel initialisiert wurde. Der EEPROM -Treiber initialisiert das Gerät und bietet dem Linux -Kernel die Möglichkeit, das EEPROM zu lesen/zu schreiben.

Nehmen wir ein Beispiel für den EEPROM -Gerätetreiber als AT24, Quellcode für das Gerät finden Sie unter dem Link: https: // github.com/torvalds/linux/blob/master/treiber/misc/eeprom/at24.C

Dieser Treiber unterstützt eine sehr große Anzahl von EEPROM -Geräten, wie in den Kommentaren des Treibers Atmel AT24C oder * Microchip 24LC usw. beschrieben.

Im Folgenden finden Sie die Gerätebauminformationen, die hinzugefügt werden sollen, um eine Geräteinstanz zu erstellen:

eeprom@50
kompatibel = "Atmel, 24c32";
Reg = <0x50>;
pageSize = <32>;

Dies sollte dem spezifischen I2C -Controller -Knoten hinzugefügt werden, wo dieses EEPROM -Gerät verbunden ist.

Wie wir sehen können, gibt es eine kompatible Zeichenfolge. Dies sind die von Linux Kernel verwendeten Informationen, um den Gerätetreiber des EEPROM -Geräts zu finden.

Um die Informationen zu den im Linux -System vorhandenen Geräten und Geräten zu erhalten, sind SYSFS -Einträge der beste Ort.

Für jedes Gerät und jeden Treiber auf dem System werden SYSFS -Einträge vom Kernel erstellt. Der Benutzer kann diese SYSFS -Dateien verweisen, um das System zu diagnostizieren.

Wenn wir den Inhalt des SYS -Verzeichnisses im Linux -Kernel sehen:


/sys/bus: Alle auf dem System vorhandenen Busse sind darin aufgeführt.

I2C -Bus ist auch zu sehen. Als wir über das Beispiel des I2C -Geräts diskutierten. Im Busverzeichnis haben wir ein I2C -Busverzeichnis.

Für jeden Bus in den SYSFs werden alle Geräte und Fahrer in diesem Bus anwesend sein. Lassen Sie uns den Inhalt des I2C -Busses sehen:

Wenn wir das Geräte- und Treiberverzeichnis weiter stöbern, erhalten wir die vollständige Liste der Geräte und Treiber, die dem Linux -Kernel bekannt sind.

In den Geräten können wir sehen, dass im System mehrere I2C -Busse vorhanden sind. I2C-0, I2C-1, I2C-5 usw., sind verschiedene I2C -Busse. 0-0018 und 0-001a sind die Sklavengeräte auf I2C-0. 1-0050 und 1-0068 sind die I2C-Slave-Geräte im Bus Nr. 1 i.e. I2C-1.

Im Verzeichnis des Fahrers haben wir die Liste aller I2C -Slave -Geräte -Treiber.

Zurück zu unserem Beispiel für EEPROM-Geräte, 1-0050 ist das EEPROM-Slave-Gerät. Wenn wir weiter in das 1-0050-Verzeichnis eintauchen, werden wir so etwas wie unten sehen:


Dies hat uns das Wissen über den Treiber vermittelt, der dieses Gerät steuert. In der Snapshot können AT24 -Treiber die im System enthalten. Dies ist der Treiber, der mit diesem EEPROM -Gerät verknüpft ist.

Um über den Benutzerbereich auf das EEPROM -Gerät zuzugreifen, hat Treiber die Datei „EEPROM“ erstellt, die auch im Snapshot zu sehen ist.

Um die 8K -EEPROM -Daten zu lesen und in die Datei abzugeben, kann der DD -Befehl wie unten verwendet werden:

dd if =/sys/bus/i2c/devices/1-0050/eeprom von = eeprom_data.Bin BS = 1K Graf = 8

Wie aus den Protokollen ersichtlich ist, dass 8K -Bytes aus dem EEPROM gelesen und an die EEPROM_DATA geschrieben werden.Bin -Datei. Diese Bin -Datei hat die EEPROM -Daten. DD -Befehl ist am beliebtesten und am häufigsten verwendeten Befehl in Linux World.

Genau wie bei diesem EEPROM -Gerät müssen auch andere i2C -Geräte den von Linux Kernel bereitgestellten Richtlinien befolgen. Andere I2C -Geräte könnten RTC, TOCH -Bildschirm usw. sein. Insgesamt gilt dieses Gerätetreiber -Framework auch für die Geräte außerhalb des i2C -Bereichs.

Es kann ein SPI -Gerät oder ein anderes Gerät sein. Es gibt eine Geräteinstanz und eine andere Treiberinstanz. Sowohl das Gerät als auch der Treiber werden über Busfahrer verknüpft/verbunden. Dies ist das generische Geräte -Treiber -Framework unter Linux.

Bindung und Entbindung des Treibers

Die Bindung des Treibers mit dem Gerät ist der Prozess der Zusammenarbeit oder Verknüpfung des Treibers mit dem Gerät, das es steuern oder versteht. Das Unentfinding ist der umgekehrte Vorgang, wenn wir den Treiber mit dem Gerät entfernen.

In allen Treibern sind SYSFS -Dateien vorhanden. Dateinamen sind gebunden und unbindlich. Dies sind die Dateien, die zum Binden und Entbinden verwendet werden können. Im Folgenden finden Sie die Momentaufnahme des EEPROM -Treibers AT24:

Treiber mit Gerät entbinden

Wie wir sehen können, ist die Geräteinstanz in AT24 vorhanden. Dies bedeutet, dass das Gerät bereits verknüpft ist. Wir können den Gerätenamen wiederholen, um den Treiber vom Gerät zu entbinden.

Die Entbindung des Treibers mit dem Gerät ist im Snapshot zu sehen.

Echo 1-0050>/sys/bus/i2c/treiber/at24/unbind; ist der Befehl, der die Entbindung erledigt hat. Nach diesem Befehl ist das Gerät nicht vorhanden. Daher ist das Gerät jetzt nicht mit dem Treiber verbunden.

Bindung des Treibers mit Gerät

Echo 1-0050>/sys/bus/i2c/treiber/at24/bindend; ist der Befehl, der die Bindung des Treibers an das Gerät durchführt.

Der erste LS -Befehl zeigt, dass Gerätedetails im AT24 -Verzeichnis nicht vorhanden sind, was bedeutet, dass das Gerät mit keinem Treiber verknüpft ist. Zweitens haben wir einen Befehl ausgestellt, um das Gerät mit dem Treiber zu verknüpfen. Infolgedessen haben wir gesehen. Daher wird der Treiber erfolgreich mit dem Gerät verknüpft.

Das Gerät kann erst nach der erfolgreichen Bindung des Treibers mit dem Gerät zugegriffen werden.

Abschluss

Wir haben das Geräte -Treiber -Framework im Linux -Kernel mit einem Beispiel für I2C EEPROM -Geräte besprochen. Wir haben die EEPROM -Geräteerstellung im Gerätebaum und die Verknüpfung des Treibers mit dem Gerät untersucht. In den SYSFS -Dateien wurden einige Erkundungen durchgeführt, die die sehr guten diagnostischen Informationen zu Geräten und Treibern im Linux -Kernel liefern. Wir haben mit Hilfe des DD -Befehls ein Beispiel für EEPROM -Zugriff gesehen. Wir haben auch das generische Gerüst mit Geräte, Treibern und Bussen verstanden. Endlich verwiesen wir auch die Möglichkeiten, Treiber und Geräte manuell aus dem Benutzerbereich zu binden und zu entbinden.