CPU-Register abfragen

  • Ausgehend von des GrandAdmiralThrawn s Problem hier :


    und da ich ihm mal vor langer Zeit versprochen hatte, mir das BIOS des Boards anzuschauen, aber diese Arbeit vor einem Jahr unterbrechen mußte wegen anhaltender Kopfschmerzen, sobald ich auf den Code stierte, hab ich mir mal gedacht, selbst ein Programm zu schreiben, das die Register der CPU auslesen kann. So was scheint es ja nicht zu geben. WPCRedit macht das für den Chipsatz und ein paar PCI-Geräte, CPU-Daten konnte ich damit jedoch noch nie abrufen.


    Okay, nach 10 Tagen C für dummies Lesen und parallel dazu schnell das Programm schreiben, mal die erste, halbgare Version getestet:

    RegQuery: Quick'n'Dirty - in allerbester Microsoft-Manier :)

    aber unter Linux mit root-Rechten :P

    und Linux läuft danach ohne Zicken weiter =O


    Unter Linux liest das Programm jedenfalls schon mal irgendwelche DWORDs aus, die sich nach Erhöhung des Offsets um 4 dann ändern. Soweit so logisch, da ein Offset 1 Byte speichert und 4 Bytes = 1 DWORD sind. Chipsatz (abgekürzt mit M für Motherboard) und CPU (abgekürzt mit C) ergeben unterschiedliche Werte. Auch gut. :)


    Leider kann ich nicht beurteilen, ob die Werte Sinn ergeben, da mir die Datenblätter zur Hardware meines Linuxrechners

    - CPU: Intel Core2 Duo E8200

    - Chipsatz: nVidia nForce 650i SLI (Northbridge C55) + 570i SLI (Southbridge MCP55P)

    fehlen.

    Die Ausgabe von FFFFFFFFh bei Eingabe von C 0 0 44 deutet jedenfalls darauf hin, das ich versucht habe, ein nicht existendes Register zu lesen.

    Auch ein Vergleich mit WPCRedit-Werten geht nicht, da ich das Programm trotz WINE unter Linux nicht starten kann. Keine Rechte. :rolleyes:

    Mit Windowsrechnern bin ich zur Zeit nicht verflucht. ;)



    Wenn mir jemand die Datenblätter zur oben genannter Hardware schicken könnte, käme ich schon einen guten Schritt weiter. 8)

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:


    Meine Begehren

  • Lotosdrache

    Changed the title of the thread from “CPU Register abfragen” to “CPU-Register abfragen”.
  • Sowas wie Zugriff auf Chipsatzregister wird mit wine niemals gehen. Wine lebt strikt im Userspace. Für low-level Zugriff auf die Hardware mußt du aber im Kernelspace sitzen, also bei Betriebssystemen die diese Trennung haben (WinNT und tendenziell auch alle UNIX-artigen Systeme gehören dazu), oder administrativen Zugriff auf entsprechende Schnittstellen zwischen Kernel- und Userpace besitzen. Dafür gibt's zum Glück auch hier Programme.


    Um WPCREdit Funktionalität unter Linux und diversen UNIX-Systemen nachzustellen solltest du Werkzeuge wie etwa pciconf (FreeBSD) oder lspci und setpci (Linux) nutzen können. Mit letzterem habe ich auch schon Mal einen GMA950 unter FreeBSD [getaktet], wo es diese Tools allesamt gibt. Durch Umschreiben eines solchen PCI Konfigurationsregisters. Genau so dürfte damals auch das "GMABooster" Programm gearbeitet haben. lspci und setpci finden sich normal in einem Paket das irgendwie pciutils oder pcitools oder so heißt, je nach Linux Distribution. Die erlauben ein Auslesen und Setzen der Konfigurationsregister, siehe entsprechende man pages. Damit müßtest du deine Ausgaben eigentlich verifizieren können, zumindest für Geräte am PCI Bus. Dazu zählt in der Regel eben auch der Chipsatz.


    Auf jeden Fall ein cooles Projekt! Bin voll dafür! :spitze:


    Edit: Die gewünschten Datenblätter habe ich leider nicht auf Vorrat, müßte ich selber suchen im Netz, leider.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

    Edited once, last by GrandAdmiralThrawn ().

  • Ah, okay, muß ich mir mal anschauen.


    Konntest Du mit pciconf (FreeBSD) oder lspci und setpci (Linux) eigentlich Deinen ECC-Status ermitteln?

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:


    Meine Begehren

  • Ich wüßte nicht, wie. Genau dafür wäre ja ein Tool nötig, das CPU Konfigurationsregister ausliest, anstatt solche am PCI Bus bzw. im Chipsatz? Oder habe ich da etwas falsch verstanden? Aktuell habe ich die Platine leider schon in meine 24/7 Workstation eingebaut, und die rennt mit Windows. Aber wenn ich dich mißverstanden haben sollte, und ein Auslesen aus dem PCI Registerraum möglich wäre, dann ginge das ja auch unter Windows.


    Ich hätte sonst zur Not auch noch meine irgendwie angeknackste. ältere Plattform, die ich ersetzt habe. Die kann ich flugs mit jedem beliebigen Betriebssystem bestücken. Als Testplattform, auch für deine Software, wenn du das ernsthaft weiterverfolgen möchtest. Ich muß nur noch irgendeinen unbuffered DDR3 ECC Speicher wo herschaffen, mein ganzer Kingston ECC ist schon in oben besagter Workstation gesteckt. Und der wird dort auch wirklich zur Gänze gebraucht.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Eine Erkenntnis aus dem Studium der Datenblätter zu Deiner Xeon 56xx CPU und dem Reverse Engineering Deines BIOSes ist, daß die Zugriffsmethode davon abhängt, was man an der CPU konfigurieren möchte:


    1. Model Specific Registers: Deren Inhalt wird über einen speziellen Befehl in die allgemeinen Register EDX:EAX ausgelesen, dort modifiziert und über einen anderen Befehl wieder zurückgeschrieben. Die Einstellungen des Cache z. B. werden so gesetzt (stark verkürzt dargestellt jedenfalls ;)).


    2. PCI-Bus: Der Inhalt dieser Register wird mittels des gleichen Verfahrens gelesen und geschrieben, wie man es auch vom Chipsatz her kennt. Schaut man sich die Beschreibung der ECC-Funktion im Datenblatt an,

    dann sehen die Angaben so aus, als gehörten sie zu einer PCI-Adresse, oder?


    Die Zugriffsmethoden sind ein ziemliches Sammelsurium der CPU-Entwicklung vor dem Hintergrund von Intels Kompatibilitätsversprechen. Ohne Datenblatt ist es halt echt schwer, ein Programm dafür zu schreiben, weil man unabhängig von der Zugriffsmethode die Adressen und deren zugeordnete Funktionen nicht kennt. Ohne diese Infos würde ich aber nicht so eben mal irgendwas ändern wollen und um sie zu bekommen, sind zahlreiche Versuche mit minimalen Änderungen notwendig. Beinhartes Reverse Engineering eben...



    Wenn Du Deinem Wackelboard noch einen sinnstiftenden Lebensabend gönnen möchtest, dann reaktiviere es doch für ein paar Versuche. Für diesen Fall wäre es ja auch wurscht, ob das Programm mit root/Admin-Rechten läuft oder im Userspace. Für eine evtl. finale Version wäre letzteres natürlich wünschenswert - obwohl manch Admin darüber vielleicht anders denken mag, wenn jeder plötzlich an der CPU herumpfuscht ;) - aber für Dein Problem ist das jetzt völliger Overkill in Anbetracht dessen, daß ein Versuchskaninchen zur Verfügung steht und die Workstation unbekümmert weiter laufen kann. Wenn es Dir aber jetzt schon derart wichtig ist, daß alles sauber implementiert ist, mußt Du noch etwas länger Geduld zeigen, da ich blutiger Programmieranfänger bin.


    Da ich mich hier auf völligem Neuland bewege, wäre es hilfreich, wenn Du nicht nur ECC-Speicher testen würdest, sondern auch nicht ECC-Speicher in gleicher Größe, Geschwindigkeit, Dichte usw. - selbstverständlich nicht gleichzeitig. ;) Damit ließe sich mittels Vergleich der Registerwerte herausfinden, ob Asus nicht doch eine Routine zur automatischen Erkennung der ECC-Fähigkeiten der RAM-Module programmiert hat.

    Weiterhin könnte man in Betracht ziehen, die CPU-Register unter DOS auszulesen, um mögliche Änderungen der Einstellungen durch Windows-/Linux-Treiber aufzudecken. Sollte es aber ausreichen, daß ECC auf dem Zielsystem läuft, wäre der Vergleich ECC-DDR3 <-> nicht-ECC-DDR3 vermutlich ausreichend.


    Aber wenn ich dich mißverstanden haben sollte, und ein Auslesen aus dem PCI Registerraum möglich wäre, dann ginge das ja auch unter Windows.

    Was würdest Du dazu vorschlagen? Dein Zielsystem scheint ja Windows zu sein.


    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:


    Meine Begehren

  • Oh ja, diesen Schinken kenne ich... ***Backen aufblasen*** :S

    Den hab ich schon in zwei Versionen auf der Platte liegen und den von AMD seit ein paar Tagen auch noch :topmodel:



    Aber trotzdem Danke für den Hinweis. :spitze:


    Im Moment schreib ich den Code für die Eingabe um.


    Die Lesefunktion des PCI-Buses wurde aus der Spaghetti Carbonara herausgelöst und als eigene Funktion realisiert.

    Wobei ich immer noch mit Rootrechten direkt auf den PCI-Bus zugreife. X/

    Gibt es da keine Funktion im Linuxkernel, die man auch mit Userrechten aufrufen kann?


    Eine Angabe des Offsets ist nicht mehr notwendig. Jetzt können alle Offsets einer Gerätefunktion auf einmal gelesen und dann mittels einer neuen Funktion als Tabelle im Stile von WCPRedit auf der Konsole dargestellt werden.


    Viel Arbeit ich noch habe...

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:


    Meine Begehren

  • Uff, das braucht 'ne Weile, um es zu verstehen...

    :/

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:


    Meine Begehren