Wie sich herausstellt, sind sich nur wenige der Existenz eines Overlay-Modus in ACPICA und ihrer Unterstützung unter Linux bewusst. Ich möchte diese Lücke mit dem Beispiel füllen, I2C-Slaves zum System hinzuzufügen, ohne sie neu zu kompilieren.
Ausgangsbedingungen
Sagen wir beim Start
i2cdetect -y -r 0
Wir haben das folgende Bild:
I2cdetect Ausgabe 0 1 2 3 4 5 6 7 8 9 abcdef
00: - - - - - - - - - - - - - -
10: - - - - - - - - - - - - - - - - - -
20: - - - - - - - - - - - - - - - - - -
30: - - - - - - - - - - - - - - - - - -
40: - - - - - - - - - - - - - - - - - -
50: - - - 53 - - - 57 - - - - - - - - -
60: - - - - - - - - - - - - - - - - - -
70: - - - - - - - - -
Dabei wird der ADXL345-Beschleunigungsmesser an der Adresse 0x53 erkannt und der 24c128-Speicher-EEPROM-Chip an der Adresse 0x57. Beschreibungen dieser Geräte sind in ACPI nicht verfügbar, nämlich in der
DSDT- Tabelle.
ADXL345 Beschleunigungsmesser hinzufügen
Alles, was wir hier wissen müssen, ist die Adresse, unter der das Gerät antwortet, seine vom Treiber unterstützte ID, die Frequenz des Busses, auf dem es arbeiten soll.
Bitte beachten Sie, dass die Frequenz des I2C-Busses auf der Fahrerseite häufig auf das Minimum eingestellt ist, das von allen Slave-Geräten auf diesem Bus unterstützt wird!Oh ja, es gab eine Zeit, in der das
IIO- Subsystem nicht existierte und der ADXL345-Treiber bereits existierte. Wir verwenden also eine
neue , die über das IIO-Subsystem verfügbar ist.
Insgesamt
- Adresse: 0x53
- Busfrequenz: 400 kHz
- Verbindung zum Master-Gerät (Controller): \ _SB.PCI0.I2C1
- ID: adi, adxl345
Es ist zu beachten, dass wir hier eine spezielle Kennung verwenden, die für Systeme mit
OF vorgesehen ist . Als Schicht in ACPI wurde eine spezielle Kennung
PRP0001 hinzugefügt, die die Kompatibilität mit Treibern gewährleistet, die zuvor für OF geschrieben wurden.
Wir übersetzen die erhaltenen Informationen in
ASL :
ASL-Code für ADXL345-Beschleunigungsmesser DefinitionBlock ("adxl345.aml", "SSDT", 5, "", "ADXL345", 1) { External (_SB_.PCI0.I2C1, DeviceObj) Scope (\_SB.PCI0.I2C1) { Device (ACL0) { Name (_HID, "PRP0001") Name (_DDN, "Analog Devices ADXL345 3-axis accelerometer") Name (_CRS, ResourceTemplate () { I2cSerialBusV2 ( 0x0053,
Fügen Sie das EEPROM 24c128 hinzu
Wie im vorherigen Fall erhalten wir die erforderlichen Informationen über das Gerät und seinen Treiber:
- Adresse: 0x57
- Busfrequenz: 400 kHz
- Verbindung zum Master-Gerät (Controller): \ _SB.PCI0.I2C1
- ID-Nummer: INT3499
- Band: 1024
- Seitengröße: 32
ASL-Code für EEPROM 24c128 DefinitionBlock ("at24.aml", "SSDT", 5, "", "AT24", 1) { External (_SB_.PCI0.I2C1, DeviceObj) Scope (\_SB.PCI0.I2C1) { Device (EEP0) { Name (_HID, "INT3499") Name (_DDN, "Atmel AT24 compatible EEPROM") Name (_CRS, ResourceTemplate () { I2cSerialBusV2 ( 0x0057,
Beachten Sie den Unterschied zur vorherigen Option. Es verwendet direkt die ACPI-ID, die dank der Intel Galileo-Plattform in dem von Intel kontrollierten Bereich zugewiesen wird. Der zweite Unterschied besteht darin, dass wir zusätzliche Geräteparameter in Form von Schlüsselwertzeichenfolgen übergeben.
Mögliche Initialisierungsoptionen
Was tun mit all dem? Der Algorithmus ist einfach. Zunächst müssen Sie die resultierenden Dateien in ASL-Bytecode kompilieren. Wird durch Aufrufen eines Befehls erreicht
iasl adxl345.asl
und analog für EEPROM. Zweitens wählen Sie eine Möglichkeit, die neu erstellte Tabelle zu initialisieren. Es gibt tatsächlich drei davon: 1) Beitreten zu initramfs, 2) Laden auf das Arbeitssystem über ConfigFS, 3) Laden der Tabelle aus der EFI-Variablen. Betrachten Sie die ersten beiden unten.
Initramfs beitreten
Wir werden mit dem
initramfs- Archiv
selbst nichts
anfangen. Es wird jedoch empfohlen, das Original irgendwo beiseite zu legen.
Nach diesem Vorgang können Sie das alte Archiv durch ein neues ersetzen und den Computer neu starten.
So etwas sollte in der dmesg-Ausgabe erscheinen:
[ 0.000000] ACPI: Table Upgrade: install [SSDT- - ADXL345] [ 0.000000] ACPI: SSDT 0x000000003F4FF5C4 0000A6 (v05 ADXL345 00000001 INTL 20170303)
Beachten Sie, dass der Kernel nur eine Kette von bis zu 64 solcher Archive unterstützt.
Download über ConfigFS
Diese Funktion ist verfügbar, wenn der Kernel mit der Option CONFIG_ACPI_CONFIGFS kompiliert und ConfigFS bereitgestellt wird. Angenommen, es ist im Unterverzeichnis
/ sys / kernel / config gemountet, zeigt das folgende Beispiel, wie eine Tabelle geladen wird.
cd /sys/kernel/config/acpi/table mkdir adxl345 cat ~/adxl354.aml > adxl345/aml
Fazit
Obwohl ASL mehr Klammern als Analoga erfordert, bietet es dennoch nicht weniger Möglichkeiten, Geräte zu beschreiben. Es gibt also eine Reihe von Beispielen im
Meta-ACPI- Projekt, in denen Sie insbesondere Beschreibungen von LEDs und Tasten finden, die mit GPIO-Leitungen, Speicherchips verbunden sind, und sogar eine Beschreibung des
Adafruit 2.8 " -Moduls - TFT-Display mit Touchscreen!