Extras für die Samsung Galaxy Book-Serie: Treiber für die Linux-Plattform.
Aktueller Stand:
Die Absicht besteht darin, unter Linux einigermaßen zu reproduzieren, was Samsung unter Windows gemacht hat, und zwar mit dem, was meiner Meinung nach die folgenden Komponenten tun:
SCAI
ACPI-Gerät interagiert, um viele dieser Einstellungen zu steuern.SamsungSystemSupportEngine.exe
startet, das offenbar eine ganze Reihe von Dingen auf der Userspace-/Anwendungsseite erledigt, darunter: Hierbei handelt es sich um einen neuen und (derzeit) völlig außerhalb des Baumkerns liegenden Plattformtreiber, der nachahmen soll, was der Windows-Systemgerätetreiber Samsung System Event Controller zu tun scheint (nämlich mit dem SCAI
ACPI-Gerät kommunizieren, um diese zusätzlichen Funktionen zu steuern). ). Sobald weitere Funktionen hinzugefügt und getestet wurden, möchte ich versuchen, den Treiber einzureichen, der dem Kernel hinzugefügt werden soll.
Die folgenden Funktionen sind derzeit implementiert:
fan_speed_rpm
sowie ein neues Hwmon-GerätDie folgenden Funktionen könnten möglicherweise implementiert werden, erfordern jedoch zusätzliches Debugging und Entwicklung:
SAM0427
Bei den von diesem Plattformtreiber unterstützten Geräten sollte es sich um alle Geräte handeln, bei denen sudo dmidecode --type 3
meldet Manufacturer: SAMSUNG ELECTRONICS CO., LTD.
und Type: Notebook
, PLUS dass das ACPI-Gerät SCAI
mit ACPI-Geräte-IDs vorhanden ist, die mit der im Treiber angegebenen Liste übereinstimmen ( SAM0427
, SAM0428
, SAM0429
und SAM0430
zum Zeitpunkt des Verfassens dieses Artikels). Dies deckt die meisten derzeit erhältlichen Notebooks der „Samsung Galaxy Book“-Serie ab, könnte aber auch andere umfassen.
Die Absicht besteht darin, dass jede Funktion innerhalb des Plattformtreibers versucht zu testen, ob sie auf irgendeine Weise unterstützt wird oder nicht, bevor die Funktion aktiviert wird. Einige Geräte verfügen über eine leicht unterschiedliche Hardware und/oder verhalten sich etwas anders. Wenn Sie ein Gerät haben, bei dem der Treiber eine bestimmte Funktion deaktiviert, die Ihrer Meinung nach unterstützt werden sollte, erstellen Sie bitte ein Problem!
Ich habe auch gesehen, dass Windows den gleichen Treiber für SAM0426
verwendet (wird von Geräten wie dem Notebook 9 Pro 15" und/oder ähnlichen Geräten verwendet), daher vermute ich, dass große Teile dieses Treibers wahrscheinlich auch für diese Geräte funktionieren. Falls Sie einen haben Wenn Sie eine dieser Geräte haben und diesen Treiber damit testen möchten, erstellen Sie bitte ein Problem, um Hilfe zu erhalten und Ihre Ergebnisse mitzuteilen.
Der Plattformtreiber unterstützt die folgenden Modulparameter:
kbd_backlight
: Steuerung der Tastatur-Hintergrundbeleuchtung aktivieren (standardmäßig aktiviert) (bool)battery_threshold
: Aktivieren Sie die Schwellenwertsteuerung für die Batterieladung (standardmäßig aktiviert) (bool)performance_mode
: Leistungsmodussteuerung aktivieren (standardmäßig aktiviert) (bool)allow_recording
: Steuerung aktivieren, um den Zugriff auf Kamera und Mikrofon zuzulassen oder zu blockieren (standardmäßig aktiviert) (bool)fan_speed
: Lüftergeschwindigkeit aktivieren (standardmäßig aktiviert) (bool)i8042_filter
: Erfassen von Tastatur-Hotkey-Ereignissen aktivieren (standardmäßig aktiviert) (bool) Im Allgemeinen besteht der Zweck dieser Parameter darin, die Aktivierung oder Deaktivierung verschiedener vom Treiber bereitgestellter Funktionen zu ermöglichen, insbesondere in Fällen, in denen eine bestimmte Funktion anscheinend Probleme mit Ihrem Gerät verursacht. Die Verfügbarkeit der verschiedenen „Einstellungen“-Plattformattribute ( usb_charge
, start_on_lid_open
usw.) wird immer aktiviert, wenn sie unterstützt zu werden scheinen, und kann derzeit nicht deaktiviert werden.
Hinweis: Melden Sie bitte ein Problem, wenn Sie feststellen, dass Sie eine bestimmte Funktion deaktivieren müssen, um ein Problem zu vermeiden, das sie mit Ihrem Gerät verursacht!
Kompilieren Sie das Modul außerhalb des Baums, aber mit den Modulen des aktuell geladenen Kernels:
make -C /lib/modules/ ` uname -r ` /build M= $PWD
Installieren Sie dieses Modul in die Module Ihres aktuell geladenen Kernels:
sudo make -C /lib/modules/ ` uname -r ` /build M= $PWD modules_install
sudo depmod
Hinweis: Wenn Sie Debug-Meldungen aktivieren möchten, können Sie
samsung_galaxybook.dyndbg=+p
oder ähnliches zu Ihren Startparametern hinzufügen.
Laden Sie das Modul (einschließlich der Aktivierung von Debugging-Meldungen):
sudo modprobe samsung-galaxybook dyndbg=+p
Entladen Sie das Modul:
sudo rmmod samsung-galaxybook
Deinstallieren Sie das Modul:
sudo rm /lib/modules/ ` uname -r ` /updates/samsung-galaxybook.ko *
Dieses Modul kann mit dkms installiert werden und bietet eine automatische Installation für jeden neuen Kernel.
Modul zum DKMS-Baum hinzufügen:
sudo dkms add /path/to/module/directory/samsung-galaxybook-extras
Build-Modul:
sudo dkms build samsung-galaxybook/extras
Modul installieren:
sudo dkms install samsung-galaxybook/extras
Modul deinstallieren:
sudo dkms uninstall samsung-galaxybook/extras
Wenn Sie den Treiber signieren möchten, um die Meldung samsung_galaxybook: module verification failed: signature and/or required key missing - tainting kernel
zu vermeiden, müssen Sie das Modul nach dem für Ihre Distribution typischen Prozess signieren. Für Debian-basierte Distributionen (einschließlich Ubunutu) können Sie das linux-source
für Ihren aktuellen Kernel installieren und die enthaltenen Schlüssel und Skripte verwenden, um das Modul wie folgt zu signieren:
sudo rmmod samsung-galaxybook
/usr/src/ ` uname -r ` /debian/scripts/sign-module sha512 /usr/src/ ` uname -r ` /debian/certs/signing_key.pem /usr/src/ ` uname -r ` /debian/certs/signing_key.x509 samsung-galaxybook.ko
sudo cp samsung-galaxybook.ko /lib/modules/ ` uname -r ` /updates/samsung-galaxybook.ko
sudo modprobe samsung-galaxybook dyndbg=+p
Wenn Sie das Drucken der Debug-Meldungen aktivieren, sind wesentlich detailliertere Meldungen verfügbar. Dies kann mithilfe des dynamischen Debugs erfolgen, sofern CONFIG_DYNAMIC_DEBUG
Ihres aktuellen Kernels aktiviert ist. Weitere Informationen zur Verwendung dieser Funktion finden Sie in der Kernel-Dokumentation: Dynamisches Debuggen
Hier einige Beispiele:
# enable printing all messages from the module when loading it
sudo modprobe samsung-galaxybook dyndbg=+p
# enable printing all messages from the module after it has been loaded
echo " module samsung_galaxybook +p " | sudo tee /sys/kernel/debug/dynamic_debug/control
Sie können den Parameter samsung_galaxyboo.dyndbg
auch mit dem gewünschten Wert (z. B. +p
) zu Ihren Boot-Befehlszeilenparametern oder zu einer modprobe.d
Konfigurationsdatei hinzufügen, wenn Sie möchten, dass er automatisch aktiviert wird.
Mit den Modulparametern können die meisten Funktionen aktiviert oder deaktiviert werden. Beispielsweise würde Folgendes das Modul nur mit den Kerneinstellungsflags ( usb_charge
, start_on_lid_open
usw.) und der LED-Klasse kbd_backlight neu laden und alle anderen Funktionen würden deaktiviert:
sudo rmmod samsung-galaxybook
sudo modprobe samsung-galaxybook dyndbg=+p kbd_backlight=on battery_threshold=off performance_mode=off allow_recording=off fan_speed=off i8042_filter=off
Beachten Sie, dass diese auch zu den Boot-Parametern hinzugefügt werden können (z. B. samsung_galaxybook.fan_speed=off
).
Eine allgemeine Beobachtung, die ich gemacht habe, ist, dass es tatsächlich eine ganze Reihe von Fehlern in der Samsung-Firmware für diese Geräte gibt, zum Beispiel:
Es wäre toll, wenn wir diesbezüglich tatsächlich Hilfe von Samsung bekommen könnten!
Samsung hat sich dafür entschieden, die Haupttastatur auch zum Senden der meisten Hotkey-Ereignisse zu verwenden. Wenn der Fahrer diese Hotkeys erfassen und darauf reagieren möchte, müssen wir beispielsweise einen i8402-Filter verwenden, um die Tastenereignisse zu „fangen“.
Ich habe auch festgestellt, dass es bei einigen Hotkey-Ereignissen Konflikte gibt, sodass es sich hier um ein etwas kniffliges Gebiet handelt.
Der Hotkey für die Hintergrundbeleuchtung der Tastatur durchläuft nacheinander alle verfügbaren Helligkeitsstufen der Hintergrundbeleuchtung und beginnt wieder bei 0, wenn das Maximum erreicht ist (d. h. 0, 1, 2, 3, 0, 1, ...).
Die Aktion wird beim Drücken des Hotkeys ausgelöst, da das durch Drücken der Taste gemeldete Ereignis anscheinend dasselbe Ereignis für den Fortschritt des Batterieladevorgangs ist (und daher wird es etwas verrückt, wenn Sie mit dem Laden beginnen!).
Der Hotkey sollte auch das Hardware-Änderungsereignis für die LED auslösen, das in GNOME (und wahrscheinlich auch anderen) automatisch ein schönes OSD-Popup mit der richtigen Hintergrundbeleuchtungsstufe anzeigt.
Der Hotkey „Aufnahme blockieren“ schaltet die Funktion allow_recording
um, die den Zugriff auf die integrierte Kamera und das Mikrofon blockiert.
Der Leistungsmodus-Hotkey durchläuft außerdem alle verfügbaren Plattformprofile im Round-Robin-Verfahren (geringer Stromverbrauch, leise, ausgeglichen, Leistung, geringer Stromverbrauch, leise, ...).
Derzeit gibt es kein OSD-Popup, aber das Ereignis kann bei Bedarf über das Eingabegerät „Samsung Galaxy Book Extra Buttons“ erfasst werden.
Es gibt ein neues Eingabegerät namens „Samsung Galaxy Book Extra Buttons“, das Eingabeereignisse für einige Benachrichtigungen vom ACPI-Gerät sendet:
SAM0428
-Modelle)SAM0428
-Modelle) Es wird eine neue LED-Klasse namens samsung-galaxybook::kbd_backlight
erstellt, die über sysfs
unter /sys/class/leds/samsung-galaxybook::kbd_backlight/brightness
(Werte 0 bis 3) oder durch viele der Standarddienstprogramme wie gesteuert werden kann brightnessctl
, light
usw.
Es scheint auch automatisch in GNOME 45.x im Bedienfeld aufgenommen zu werden, wo Sie auf den Pfeil neben Keyboard
klicken und den Schieberegler anpassen können.
Beachten Sie, dass die Einstellung „Tastaturbeleuchtung nach X Sekunden automatisch ausschalten“ in Windows tatsächlich vom Anwendungsdienst von Samsung und nicht vom Gerätetreiber selbst gesteuert wird; Es gibt eine ähnliche Funktion in GNOME (und wahrscheinlich auch anderen), bei der nach einer bestimmten Leerlaufzeit auf die Mindeststufe umgeschaltet wird (z. B. von 3 auf 1, wenn Sie inaktiv sind, und dann wieder auf 3, wenn Sie fortfahren), aber unabhängig davon Die Funktion sollte wahrscheinlich irgendwie im Userspace gesteuert werden und nicht vom Kernel-Treiber.
Beachten Sie außerdem, dass die meisten dieser Geräte über einen Umgebungslichtsensor verfügen, der auch die Hintergrundbeleuchtung der Tastatur beeinflusst. Dieses Verhalten lässt sich in Windows nicht steuern und ich habe im ACPI noch nichts gefunden, was diese Funktion offenbar deaktivieren könnte. Das bedeutet, dass man manchmal denkt, die Hintergrundbeleuchtung der Tastatur würde sich zufällig ausschalten oder nicht mehr funktionieren, aber in Wirklichkeit schaltet sie sich aufgrund dieses Umgebungslichtsensors aus. Eine Möglichkeit, zu testen, wann dies geschieht (um sicherzustellen, dass es tatsächlich der Umgebungslichtsensor ist, der das Ausschalten der Tastaturbeleuchtung verursacht hat), besteht darin, den Sensor einfach irgendwie abzudecken (z. B. mit dem Finger) und zu prüfen, ob dies der Fall ist Lichter gehen wieder an.
Dieser Plattformtreiber fügt die Einstellung des Endschwellenwerts für die Batterieladesteuerung hinzu, hat jedoch keinen Zugriff zum Festlegen des Startschwellenwerts. Diese Funktion wird von den verschiedenen Samsung-Anwendungen in Windows normalerweise als „Batteriesparmodus“ bezeichnet, aber unter Linux werden wir die Standardattribute implementieren, die dem Batteriegerät hinzugefügt werden und von UPower erkannt werden.
Wenn der Benutzer die Interoperabilität mit Windows aufrechterhalten möchte, sollte er den Wert auf 80 setzen, um „ein“ darzustellen, oder auf 0, um „aus“ darzustellen, da dies die Werte sind, die von den verschiedenen Windows-basierten Samsung-Anwendungen und -Diensten als „aus“ erkannt werden. ein“ oder „aus“. Andernfalls akzeptiert das Gerät jeden Wert zwischen 0 (aus) und 99 als Prozentsatz, bei dem der Akku den Ladevorgang beenden soll. Wenn Sie versuchen, einen Wert von 100 festzulegen, akzeptiert der Treiber diese Eingabe ebenfalls, setzt jedoch nur den Attributwert auf 0 (dh 100 % wird als „Batteriesparmodus ausschalten“ interpretiert).
Unter /sys/class/power_supply/BAT1/charge_control_end_threshold
wurde ein neues Geräteattribut erstellt, aus dem gelesen oder geschrieben werden kann.
# read current value (percentage the battery will stop charging)
cat /sys/class/power_supply/BAT1/charge_control_end_threshold
# turn on and set to 80%
echo 80 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold
# turn off charge control threshold so that charging will not be stopped before 100%
echo 0 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold
Hinweis: Mir ist aufgefallen, dass der Ladevorgang nicht zu erfolgen scheint, wenn Sie gerade angeschlossen sind, während der Akku bereits den gewünschten Wert
charge_control_end_threshold
erreicht hat, und dann diese Funktion ausschalten (d. h. Sie möchten vollständig auf 100 % aufladen, also setzen Sie den Wert auf 0). automatisch starten. In diesem Fall kann es erforderlich sein, das Ladekabel zu trennen und wieder anzuschließen. Der Windows-Treiber scheint einen Hokuspokus mit dem ACPI-Batteriegerät zu treiben, den ich noch nicht ganz geklärt habe; Ich gehe davon aus, dass sie auf diese Weise dafür gesorgt haben, dass es unter Windows reibungsloser funktioniert?
Es gibt auch ein Eingabeereignis, das an die Standardtastatur und das ACPI-Gerät gesendet wird und generiert wird, wenn die Ladesteuerung aktiviert ist und der Ladevorgang den gewünschten charge_control_end_threshold
erreicht; Das Ereignis wurde dem BATTERY
-Ereignis zugeordnet, sodass Benachrichtigungen angezeigt werden können (weitere Informationen hierzu finden Sie weiter unten im Abschnitt zur Neuzuordnung der Tastatur).
Um die Einstellung „Beim Öffnen des Deckels starten“ ein- oder auszuschalten (der Laptop schaltet sich beim Öffnen des Deckels automatisch ein), wird unter /sys/devices/platform/samsung-galaxybook/start_on_lid_open
ein neues Geräteattribut erstellt, das gelesen werden kann von oder angeschrieben. Ein Wert von 0 bedeutet „aus“, während ein Wert von 1 „ein“ bedeutet.
# read current value (0 for disabled, 1 for enabled)
cat /sys/devices/platform/samsung-galaxybook/start_on_lid_open
# turn on (supports values such as: 1, on, true, yes, etc)
echo true | sudo tee /sys/devices/platform/samsung-galaxybook/start_on_lid_open
# turn off (supports values such as: 0, off, false, no, etc)
echo 0 | sudo tee /sys/devices/platform/samsung-galaxybook/start_on_lid_open
Um den „USB Charge“-Modus ein- oder auszuschalten (ermöglicht USB-Anschlüssen die Stromversorgung, auch wenn der Laptop ausgeschaltet ist), wird unter /sys/devices/platform/samsung-galaxybook/usb_charge
ein neues Geräteattribut erstellt lesen oder schreiben. Ein Wert von 0 bedeutet „aus“, während ein Wert von 1 „ein“ bedeutet.
# read current value (0 for disabled, 1 for enabled)
cat /sys/devices/platform/samsung-galaxybook/usb_charge
# turn on (supports values such as: 1, on, true, yes, etc)
echo true | sudo tee /sys/devices/platform/samsung-galaxybook/usb_charge
# turn off (supports values such as: 0, off, false, no, etc)
echo 0 | sudo tee /sys/devices/platform/samsung-galaxybook/usb_charge
Meine eigenen Beobachtungen dazu, wie diese Funktion zu funktionieren scheint (die eigentlich nichts mit diesem Treiber selbst zu tun hat):
Um die Einstellung „Aufzeichnung zulassen“ zu aktivieren oder zu deaktivieren (ermöglicht oder blockiert die Verwendung der integrierten Kamera und des Mikrofons), wird unter /sys/devices/platform/samsung-galaxybook/allow_recording
ein neues Geräteattribut erstellt, das gelesen werden kann von oder angeschrieben. Ein Wert von 0 bedeutet „aus“, während ein Wert von 1 „ein“ bedeutet.
Das Samsung-Benutzerhandbuch nennt diese Einstellung „Blockierender Aufnahmemodus“, aber da der benötigte Wert 1 für „nicht blockiert“ und 0 für „blockiert“ ist (d. h. der Wert von 1 vs. 0 fühlt sich im Vergleich zum Namen „rückständig“ an), ist er Für diesen Fahrer schien es etwas irreführend zu sein, es so zu nennen. Es scheint sinnvoller zu sein, dass 1 „erlaubt“ bedeutet und 0 „nicht erlaubt“ bedeutet; Auf diese Weise ist für den Benutzer dieses Treibers hoffentlich klarer, was tatsächlich passiert, wenn dieser Wert geändert wird.
# read current value (0 for disabled, 1 for enabled)
cat /sys/devices/platform/samsung-galaxybook/allow_recording
# turn on (supports values such as: 1, on, true, yes, etc)
echo true | sudo tee /sys/devices/platform/samsung-galaxybook/allow_recording
# turn off (supports values such as: 0, off, false, no, etc)
echo 0 | sudo tee /sys/devices/platform/samsung-galaxybook/allow_recording
Unterschiedliche Geräte verfügen über eine unterschiedliche Anzahl an Lüftern und unterschiedliche Methoden, um deren Status erfolgreich auslesen zu können. Samsung scheint für die meisten der verschiedenen Implementierungen die ACPI-Standard-Lüftergerätemethode _FST
implementiert zu haben, nicht jedoch die anderen optionalen Methoden in der ACPI-Spezifikation, die dazu führen würden, dass der Kernel automatisch das Attribut fan_speed_rpm
hinzufügt. Darüber hinaus scheint es einige Fehler in der Firmware zu geben, die häufig eine Ausnahme auslösen, wenn Sie versuchen, diese ACPI-Methode auszuführen. Dieses Verhalten tritt auch in Windows auf (dass eine ACPI-Ausnahme ausgelöst wird, wenn versucht wird, die Lüftergeschwindigkeit zu überprüfen), und ich konnte die Lüftergeschwindigkeiten mit verschiedenen Hardware-Überwachungsanwendungen nicht sehen, während ich Windows mit diesem Gerät verwende.
Dieser Plattformtreiber versucht, alle im ACPI verfügbaren PNP-Lüfter aufzulösen und Unterstützung für das Auslesen ihrer Geschwindigkeit hinzuzufügen, indem er die folgende Entscheidungslogik verwendet:
_FST
und scheint sie zu funktionieren (gibt einen Geschwindigkeitswert größer als 0 zurück)? Wenn ja, fügen Sie ein Attribut fan_speed_rpm
hinzu und als Lüftereingangskanal zum hwmon-Gerät.FANS
(Lüftergeschwindigkeitsstufe) auf dem eingebetteten Controller und die Tabelle FANT
(Lüftergeschwindigkeitsstufentabelle) auf dem Lüfter vorhanden? Wenn ja, fügen Sie fan_speed_rpm
zu diesem Lüftergerät sowie als Lüftereingangskanal zum hwmon-Gerät hinzu und erstellen Sie die Liste der benutzerdefinierten Lüftergeschwindigkeiten basierend auf der folgenden Logik (abgeleitet aus dem Lesen des DSDT und dem Versuch, die Absicht zu interpretieren, wie das funktioniert). (ursprüngliches _FST
scheint funktionieren zu wollen). Die Lüftergeschwindigkeit kann mithilfe von Hwmon-Sensoren oder durch Lesen des sysfs-Attributs fan_speed_rpm
überwacht werden.
# read current fan speed rpm from sysfs attribute
cat /sys/bus/acpi/devices/PNP0C0B : 00/fan_speed_rpm
# read current fan speed rpm from hwmon device
sensors
Bei Geräten, bei denen die _FST
-Methode nicht ordnungsgemäß funktioniert, wird die folgende Logik verwendet, um mögliche Geschwindigkeiten für jede verfügbare Stufe abzuleiten, die vom FANS
Feld gemeldet wird.
FANT
(„Lüftertabelle“?), das eine Art Liste möglicher Drehzahlgeschwindigkeiten zu sein scheint, mit denen der Lüfter für jede unterschiedliche „Stufe“ (0 bis 5) betrieben werden kann.FANS
(„Lüftergeschwindigkeit“?), das anscheinend die aktuelle „Stufe“ angibt, mit der der Lüfter arbeitet. Ich bin davon ausgegangen , dass die Werte von FANT
ganze Zahlen sind, die die tatsächlichen Drehzahlwerte darstellen (sie scheinen jedenfalls vernünftig zu sein), kann aber nicht hundertprozentig sicher sein, dass diese Annahme richtig ist. Es wäre interessant, eine Bestätigung von Samsung zu bekommen oder ob jemand eine Möglichkeit hätte, die tatsächliche Geschwindigkeit des Lüfters zu messen.
Der Lüfter kann entweder vollständig ausgeschaltet (0) oder eine der Stufen sein, die durch die Geschwindigkeiten in FANT
dargestellt werden. Dieser Treiber liest die Werte von FANT
ein, anstatt die Ebenen fest zu codieren, mit der Annahme, dass es sich bei verschiedenen Geräten um unterschiedliche Werte und eine unterschiedliche Anzahl von Ebenen handeln könnte. Als Referenz sind die Werte, die ich bei meinem Galaxy Book2 Pro sehe:
Darüber hinaus scheint es in _FST
-Methode von Samsung zu jedem Wert 0x0a
(10) hinzuzufügen, bevor versucht wird, sie zu melden, und dass Level 3 und 4 den gleichen Wert haben sollten, während Level 5 der 4. Wert von FANT
sein sollte. Allerdings deuten reale Beobachtungen darauf hin, dass die Stufen 3 und 4 tatsächlich unterschiedlich sind und dass die Stufe 5 deutlich lauter zu sein scheint als die Stufe 4. Aus diesem Grund wird dieser Treiber nur „vermuten“, dass die Stufen 3 und 4 tatsächlich so sind, wie sie sind in FANT
aufgeführt und dass die letzte Stufe vielleicht 1000 U/min schneller ist als Stufe 4 (es sei denn, jemand findet etwas Besseres als diese!).
In der Datei gb_test_fans_ssdt.dsl ist ein Test-SSDT verfügbar, das eine Reihe „gefälschter“ PNP-ACPI-Lüftergeräte enthält, mit denen getestet werden kann, wie der Treiber in verschiedenen Szenarien funktioniert. Dies kann dynamisch erstellt und geladen werden, Sie müssen jedoch auch das Plattformtreibermodul entfernen und neu laden, um zu testen, wie es damit umgeht.
# create fake device table
sudo modprobe acpi_configfs
sudo mkdir /sys/kernel/config/acpi/table/gb_test_fans_ssdt
# build and load the aml
iasl gb_test_fans_ssdt.dsl
cat gb_test_fans_ssdt.aml | sudo tee /sys/kernel/config/acpi/table/gb_test_fans_ssdt/aml
# remove and reload the module (via insmod or modprobe)
sudo rmmod samsung-galaxybook
sudo insmod samsung-galaxybook.ko dyndbg=+p
Hinweis: Sie müssen einen Neustart durchführen, um diese gefälschten Geräte zu entfernen.
Um den „Leistungsmodus“ zu ändern, implementiert der Treiber die Schnittstelle platform_profile
“. Die Zuordnung der „Leistungsmodi“ von Samsung zu ihrem jeweiligen Plattformprofil erfolgt dynamisch auf der Grundlage einer Zuordnung im Treibercode, der einliest, welche Modi vom ACPI als unterstützt gemeldet werden. Bevorzugt wird versucht, low-power
, balanced
und performance
Profile abzubilden, da dies die am häufigsten von verschiedenen Userspace-Tools verwendeten (und manchmal sogar erforderlichen) Profile zu sein scheinen.
Das Ergebnis der Zuordnung wird beim Laden des Moduls im Kernel-Protokoll ausgedruckt. Unterstützte Profile können dann von /sys/firmware/acpi/platform_profile_choices
abgerufen werden, während /sys/firmware/acpi/platform_profile
zum Lesen oder Schreiben des gewünschten Profils verwendet werden kann.
Beispiele:
# Get supported platform profiles
cat /sys/firmware/acpi/platform_profile_choices
# set platform profile to low-power
echo low-power | sudo tee /sys/firmware/acpi/platform_profile
# get current platform profile
cat /sys/firmware/acpi/platform_profile
Hinweis: Um der Logik im Windows-Treiber zu entsprechen und Probleme mit anderen Funktionen zu vermeiden, stellt der Treiber den Leistungsmodus derzeit bei jeder Initialisierung (z. B. beim Start) immer auf „Optimiert“ ein.
Es sollte möglich sein, Ihren eigenen gewünschten Startleistungsmodus festzulegen oder den Modus über Neustarts hinweg zu speichern und wiederherzustellen. Sie können entweder ein Startskript verwenden oder TLP, Power-Profiles-Daemon oder ähnliches installieren.
Das war etwas schwierig zu testen, aber ich habe versucht herauszufinden, ob diese verschiedenen Modi tatsächlich eine messbare Veränderung bewirkten, indem ich jeden einzelnen Modus einstellte und dann einen kurzen Stresstest mit den folgenden Methoden durchführte:
sudo stress-ng --cpu 0 --cpu-load 100 --metrics-brief --perf -t 20
Beachten Sie, dass es anscheinend mindestens ein paar Sekunden dauert, bis die Einstellung wirklich zu wirken scheint.
Letztendlich habe ich festgestellt, dass ich bei Verwendung des „Silent“-Modus (0) durchaus einen Unterschied im Ergebnis feststellen konnte, da die resultierende Anzahl abgeschlossener Vorgänge im Stresstest bei Verwendung des „Silent“-Modus deutlich geringer ausfiel (fast). Hälfte).
Subjektiv habe ich zwar das Gefühl, dass die Lüfterlautstärke im „Leise“-Modus im Vergleich zu den anderen beiden deutlich geringer war, einen wirklich großen Unterschied in der Anzahl der abgeschlossenen Vorgänge konnte ich gegenüber dem Stresstest aber nicht feststellen. „Optimiert“ und „Hochleistung“ kamen mir fast gleich vor. Mir ist auch aufgefallen, dass es zu einer gewissen Drosselung kommen kann, wenn die Kerne eine Temperatur von fast 100 °C erreichen. Das ist vielleicht ein Teil des Problems, weshalb ich keinen Unterschied erkennen konnte (ich bin mir nicht sicher, was man sicher anpassen kann). Es könnte sich auch einfach um einen fehlerhaften Testmechanismus handeln!
Die bereitgestellte Datei 61-keyboard-samsung-galaxybook.hwdb ist eine Kopie des relevanten Abschnitts für diese Geräte aus der neuesten 60-keyboard.hwdb, die mit älteren Versionen von systemd verwendet werden kann. Weitere Informationen finden Sie unter systemd/issues/34646 und systemd/pull/34648.
Hinweis: Die Taste „Leistungsmodus“ (Fn+F11) kommt als ACPI-Benachrichtigung und wird vom
samsung-galaxybook
-Plattformtreiber verarbeitet.
Sie können diese Zuordnungsdatei wie folgt installieren:
sudo cp 61-keyboard-samsung-galaxybook.hwdb /etc/udev/hwdb.d/
sudo systemd-hwdb update
sudo udevadm trigger