Wie kann ich alle BIOS-Einstellungen von der Linux-CLI aus lesen / schreiben?

7

Ich habe ungefähr 8 Stunden gesucht und möchte die Punkte klären, die ich noch nicht vollständig herausgefunden habe.

( TLDR-Version: Wie kann ich über die CLI auf alle BIOS-Einstellungen zugreifen (lesen und schreiben) (z. B. Virtualisierung aktivieren / deaktivieren, Turbofrequenz der GPU aktivieren / deaktivieren, Protokollanzeigezeit festlegen usw.)? )

Hier ist die Geschichte.

Erstens hatten wir alte BIOSes, wie dieser .

Und jetzt haben wir die neue Generation von BIOSes, wie dieser . Und wir nennen sie als UEFI-BIOS, bin ich richtig?


Dann habe ich folgende Artikel gelesen (und getestet):

  • www.pixelbeat.org/docs/bios/
  • stackoverflow.com/questions/6259124/apis-for-querying-and-setting-bios-properties (und auch alle Links, auf die in den Antworten verwiesen wird)
  • unix.stackexchange.com/questions/126132/how-to-dump-bios-data-to-a-file
  • stackoverflow.com/questions/34537435/where-ddmidecode-get-the-smbios-table
  • en.wikipedia.org/wiki/System_Management_BIOS
  • www.linux-mag.com/id/7768/
  • www-pc.uni-regensburg.de/hardware/techdok/bios_dmi_20.pdf (bis Seite 17)
  • www.geeklab.info/2010/05/backup-your-cmos-from-linux/
  • www.bioscentral.com/misc/cmosmap.htm
  • smackerelofopinion.blogspot.com.tr/2010/09/digging-into-bios-cmos-memory.html

Danach habe ich die BIOS-Einstellungen (wie Virtualisierung, IGD-Turbo aktivieren / deaktivieren, USB-Einstellungen ändern usw.) mehrmals geändert und den gesamten Inhalt der folgenden Dateien / Befehle bei jedem Start ausgegeben.

  • dmidecode
  • Biosdecode
  • cpuid
  • / dev / mem
  • / dev / nvram

Ergebnis? Ich habe die Dump-Ergebnisse Seite an Seite mit Meld und woala verglichen! Nichts hat sich verändert! Was zum Teufel?!!

Hier ist also die Liste meiner Fragen (ich bin ein Elektronikingenieur, damit Sie ohne zu zögern Einzelheiten erfahren oder technische Daten nachlesen können).

  1. In welchem ​​Teil des Mainboards (ich meine Chip) haben wir alle BIOS-Einstellungen gespeichert (für alte Versionen)?
  2. Welche Hardware benötigen wir, um die Einstellungen und die Benutzeroberfläche der UEFI-BIOS zu erhalten? Und wie unterscheidet sich die UEFI-BIOS-Hardware von den alten Versionen?
  3. Gibt es eine Möglichkeit, unter Linux über Treiber / Dateien auf diese (oder diese) Hardware zuzugreifen?
  4. Ist es möglich, diese Konfigurationen über das Betriebssystem zu ändern?

Alle Antworten werden sehr geschätzt.

Danke von nun an.

benjamin button
quelle
Ich könnte mich irren, aber ich denke, Ihr BIOS muss Open Source sein, was sehr selten ist. Sie existieren jedoch.
LateralTerminal

Antworten:

5

Es gibt keine generische Möglichkeit, wie ein Betriebssystem auf das System-BIOS zugreifen kann. Dies wäre nur möglich, wenn die Hersteller detaillierte Informationen liefern würden und Standards dafür festgelegt wären. Dies ist nicht der Fall, und ich halte es sowieso nicht für eine gute Idee.

Einige Hersteller haben Software für ihre eigenen Systeme erstellt, zumindest für Windows. Diese Software muss für bestimmte BIOS-Versionen entwickelt werden.

Das Problem ist, dass das BIOS für jeden Hersteller proprietär ist. Normalerweise werden Einstellungen im CMOS gespeichert, dies ist jedoch nicht erforderlich. Die Hersteller können die Einstellungen nach Belieben speichern. Für diese Details ist keine Dokumentation verfügbar.

Dies hat Auswirkungen auf die Sicherheit. Wenn legitime Software auf das BIOS zugreifen könnte, würde nichts verhindern, dass bösartige Software dasselbe tut. Dies würde eine völlig neue Welt von Möglichkeiten für Malware eröffnen, die die Entwickler voll ausnutzen würden. Natürlich könnten Schutzmaßnahmen entwickelt werden, aber sie könnten und würden umgangen werden

LMiller7
quelle
An diesem Punkt taucht in meinem Kopf eine seltsame Frage auf (möglicherweise nur aufgrund des Mangels an grundlegenden Kernelkenntnissen): Wie ich weiß, sucht der Kernel nach externen Peripherie-ICs mit vordefinierten Bus- und Lasttreibern, die für sie erforderlich sind. Der Kernel sollte also melden, welche Busse und Geräte für die Kommunikation offen sind. Kann ich einen Hinweis finden, der mich zu diesem bestimmten IC führt, indem ich die Boot-Protokolle des Kernels durchsuche? Wenn es eine Chance gibt, von wo soll ich anfangen? Welche Software liest wie Informationen über das System-BIOS und lädt diese Informationen an das Ende der DMI-Tabelle?
benjamin button
4

Was Sie BIOS nennen, sind (mindestens) 3 verschiedene Dinge:

  • Das System-Setup-Dienstprogramm (wird oft fälschlicherweise als BIOS- oder CMOS-Setup bezeichnet)
  • Das BIOS (d. H. Ein rudimentärer Bootloader und standardisierte APIs)
  • (U) EFI-Firmware (d. H. Eine modernere Version der Boot-Hardware-Abstraktion)

Während die beiden letzteren einen genau definierten Satz von APIs offenlegen, ist dies bei den ersteren nicht der Fall. Dies bedeutet, dass es keine herstellerneutrale Möglichkeit gibt, alle vom Setup-Dienstprogramm bereitgestellten Einstellungen zu ändern.

Speicherort der Einstellungen: Die meisten Hersteller verwenden akkugepufferten statischen RAM ("CMOS-RAM" in der alten Nomenklatur). Daher ist es problematisch, wenn diese CR2032-Zellen auf dem Mainboard ausfallen.

Eugen Rieck
quelle
In diesem Fall frage ich mich, wie Anbieter (d. H. ASUS) ihr "System-Setup-Dienstprogramm" unter Windows (mit BIOS-Update-Dienstprogrammen) aktualisieren können. Das heißt, sie haben Zugriff auf dieses CMOS-RAM. Ist es also möglich, auf diesen IC für Lese- / Schreibvorgänge zuzugreifen? Es würde mir ausreichen, den Rohinhalt des gesamten IC-Speichers zu sichern und einen bestimmten Wert an eine bestimmte Adresse zu schreiben.
benjamin button
1
Die Anbieter kennen ihre Produkte, sodass sie Kerneltreiber für den Zugriff auf das NVRAM entwickeln können. Dies ist natürlich hersteller- und modellspezifisch, es gibt keinen universellen Weg, dies zu tun.
Eugen Rieck
1

Auf HPE Servern können Sie die Einstellungen mit dem Dienstprogramm conrep ändern. Es ist Teil des RPM für HP-Scripting-Tools. Die Verwendung wird hier beschrieben:

h20566.www2.hpe.com/hpsc/doc/public/display?sp4ts.oid=5249594&docLocale=en_US&docId=emr_na-c05182235

Es ist ganz einfach. Mit dem Parameter -s (save) sagen Sie dies, um die Konfiguration zu speichern:

conrep -s -f BL460Gen8.dat

Und mit -l (load) Parameter sagst du es, um die Konfiguration zu laden:

conrep -l -f BL460Gen8.dat

Die dat-Datei ist eigentlich XML-Code. Wenn Sie beispielsweise Hyperthreading-Einstellungen aktivieren / deaktivieren möchten, suchen Sie die entsprechende Zeile und ändern Sie den Wert. Siehe das Beispiel für G6 und neuere Generationen:

<Section name="Intel_Hyperthreading" helptext="Toggles hyperthreading on Intel based G6 and greater systems">Enabled</Section>
Jaroslav Kucera
quelle
0

Viel bequemer, um Dinge vom Desktop aus aktivieren zu können, als das BIOS neu starten zu müssen. Ich kenne einige Einstellungen, die Sie vom Desktop aus ändern können. AMD Desktop-CPUs können ECC-Speicher ausführen, und die meisten Mainboards können auch ECC verwenden. Viele Hersteller bieten jedoch keine BIOS-Option zum Einschalten an. Trotzdem können Sie es selbst umschalten. Ich habe dies getan und der ECC-Speicher wird aktiviert. Könnte nicht gut sein, wenn Sie es bei laufendem regulären Speicher einschalten. Tun Sie das also nicht.

sudo modprobe -v amd64_edac_mod ecc_enable_override=1

Da ist der Befehl. Und das Unten macht es zwischen Stiefeln hartnäckig.

sudo echo "options amd64_edac_mod ecc_enable_override=1" >> /etc/modprobe.d/amd64_edac_mod.conf

Ich versuche gerade, das WLAN eines Laptops einzuschalten und frage mich, ob ich das vom Desktop aus tun kann. Wäre schön eine Liste zu haben, welche Optionen vom Desktop aus konfiguriert werden können. Der ECC wird nicht einmal im BIOS angeboten. Wie viele dieser Funktionen sind daher möglicherweise verfügbar, insbesondere bei bestimmten Anbietern, die ein Bare-Bones-BIOS liefern.

Sei real, sei nüchtern.

WSmart
quelle