* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 20, 2024, 02:34:36 pm

Inserisci il nome utente, la password e la durata della sessione.

27 Visitatori, 0 Utenti

Autore Topic: Accesso diretto alla CPU in HARDWARE  (Letto 2015 volte)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1273
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Accesso diretto alla CPU in HARDWARE
« il: Maggio 17, 2023, 03:58:50 pm »
Vi siete mai chiesti quali sono, dove e come accedere ai registri hardware della CPU ?
Ai miei tempi era semplice, l'accesso all'hardware era diretto, ma con l'avvento dei sistemi virtualizzati o meno basati sul kernel e sui RING (livelli si sicurezza hardware), ciò non è stato più possibile.

Ma molti tool visualizzano dati che non sono disponibili ai normali programmi, molti di questi richiedono un accesso privilegiato per evitare usi abusivi.

Quello che vi propongo oggi invece è uno strumento (purtroppo per i linuxiani è solo per Windows) che consente di accedere direttamente all'hardware di tutta la CPU, senza privilegi durante l'uso.

Io lo uso da una vita per controllare la temperatura del package della CPU ed eventualmente apportare le opportune modifiche / avvisi / .... nei software che sviluppo.

Il tutto si compone di due parti, uno è un driver kernel Windows firmato, l'altro è il wrapper pascal al driver (l'esempio che vi porto è limitato all'uso che ho indicato, ma siete liberi di sbizzarirvi).

Attenzione che si possono fare danni, in particolare il servizio è comunque a tutto il sistema WINDOWS di qualunque utente, e quindi può essere soggetto ad usi abusivi da parte di altri software / persone.

Comunque l'uso è semplicissimo e può portare dei "pro" ad diversi "softweristi".

Andiamo a vedere i dettagli:

N.B.: per lo scompattamento usate un 7-ZIP o altro, non l'explorer di windows in quanto marca i file come "dubbi".

1) Uno zip contenente il driver e la licenza d'uso. Potete scompattarlo in una qualsiasi directory, poi usate i "cmd" inclusi CHE DEVONO ESSERE FATTI GIRARE con i privilegi elevati. In particolare "Install.cmd" installa il drive in partenza auotmatica con il sistema operativo, da qui in poi l'avrete sempre a disposizione senza usare più privilegi elevati. PRIMA DI ESEGUIRE IL FILE INSTALL.CMD DOVETE EDITARE LO STESSO E PORRE il valore di "binPath=" uguale alla directory (disco compreso) dove avete scompattato lo zip.

2) Il wrapper.

3) L'esempio d'uso è indicato il questo post.

Crete un nuovo progetto Lazarus, inserite nelle Uses il wrapper in allegato
Inserite un BUTTON.
Generate gli eventi FormCreate, FormClos, ButtonClick e sovrascrivete il codice postato.

N.B.: DAL WRAPPER ho volontariamente tolto la funzionalità di scrittura dei registri CPU, in quanto può ipoteticamente generare danni hardware in alcune serie di CPU Intel (scrittura di alcuni registri per la gestione energetica).

Codice: [Seleziona]
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CLoseAction := caFree;
  ChiudiMsr;
end;

procedure TForm1.Button1Click(Sender: TObject);
var p: UInt64;
begin
  //Leggi temperatura del package CPU serie 12 !!!!
  if LeggiMsr($01b1, 0, p) then
    begin
      Button1.Caption := (100 - Word((p and ($7F0000)) shr 16)).ToString+' °'; //Temperatura package per CPU Intel serie 12
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ApriMsr;
end;

Per chi vuole sbizzarirsi con la manualistica Intel, questo è il sito: https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html

Consiglio:

(dovrete cercare la manualistica del vs. processore)
12th Generation Intel Core Processor Family - Vol 1.pdf
12th Generation Intel Core Processor Family - Vol 2.pdf
12th Generation Intel Core Processor Family - Updates.pdf

e quello generico e mastodontico

Intel® 64 and IA-32 Architectures.pdf (cinquemlia pagine circa .... 8) )
Ciao e buon divertimento.
« Ultima modifica: Maggio 18, 2023, 10:34:55 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

doc

  • Jr. Member
  • **
  • Post: 96
  • Karma: +2/-0
  • "L'Ingegnere sa quello che fa e fa quello che sa".
    • Spagnotto Ing. Mirko
Re:Accesso diretto alla CPU in HARDWARE
« Risposta #1 il: Maggio 18, 2023, 09:10:29 pm »
Interessante.... :o
Mi sta palesando l'idea di usarlo per far sì che un mio programma modifichi, da sè, il moltiplicatore della CPU.

Comunque, ottimo post DragoRosso, si vede che ne sai.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1273
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Accesso diretto alla CPU in HARDWARE
« Risposta #2 il: Maggio 19, 2023, 12:10:53 am »
A proposito, i commenti parlano della serie 12 Intel, ma quella funzione è disponibile in tutte le serie "Intel Core" dalla "Second Generation" chiamata Sandy Bridge (stiamo parlando degli anni 2011).

Interessante.... :o
Mi sta palesando l'idea di usarlo per far sì che un mio programma modifichi, da sè, il moltiplicatore della CPU.

 :o  :o  :o ;D
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1306
  • Karma: +10/-1
Re:Accesso diretto alla CPU in HARDWARE
« Risposta #3 il: Maggio 19, 2023, 08:17:57 am »
Vi siete mai chiesti quali sono, dove e come accedere ai registri hardware della CPU ?

L'ultima volta che l'ho fatto, avevo ancora il mio primo PC: un 80286 della Olivetti ... potrei avere ancora il sorgente in qualche backup !!!
Naturalmente, all'epoca usavo il Turbo Pascal !

Ciao, Mario

doc

  • Jr. Member
  • **
  • Post: 96
  • Karma: +2/-0
  • "L'Ingegnere sa quello che fa e fa quello che sa".
    • Spagnotto Ing. Mirko
Re:Accesso diretto alla CPU in HARDWARE
« Risposta #4 il: Maggio 22, 2023, 06:49:09 pm »
Mi sorge un dubbio.....DragoRosso.
Tu che ne sai una in più del diavolo: ma funziona anche per accedere ai registri di una CPU AMD Ryzen PRO 6000 Series Processors?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1273
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Accesso diretto alla CPU in HARDWARE
« Risposta #5 il: Maggio 22, 2023, 07:18:08 pm »
Dai sorgenti, vedo che la funzione interna chiamata dal driver è "readmsr" che può essere eseguita solo al ring 0 (modalità protetta livello kernel) ed è chiamata tramite il DDK di Windows che è generico e non dipendente dal processore.

Da quel che ne sò l'istruzione è presente anche nel processori AMD, ma non conosco la mappatura dei registri.

Direi quindi che si, può essere fatta girare anche nei sistemi AMD. Và verificata la mappatura e la funzionalità.

Il registro 0x01b1 dei processori Intel contiene, tra l'altro, il valore di temperatura inversa ossia il delta tra la temperatura massima di "giunzione" ammessa e la temperatura attuale. La temperatura massima dovrebbe essere definita a 100 gradi Celsius per tutti i processori Intel.

Se tutto corrisponde anche in AMD allora è OK.

Riporto lo schema del registro 0x1b1.

Ciao
« Ultima modifica: Maggio 22, 2023, 07:24:00 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

doc

  • Jr. Member
  • **
  • Post: 96
  • Karma: +2/-0
  • "L'Ingegnere sa quello che fa e fa quello che sa".
    • Spagnotto Ing. Mirko
Re:Accesso diretto alla CPU in HARDWARE
« Risposta #6 il: Maggio 23, 2023, 11:15:12 pm »
@ DragoRosso
Ho provato, sembrerebbe funzionare anche su AMD (la cpu indicata prima). L'unica cosa che trovo strana è che i valori non sono gli stessi che mi riporta, invece, CPUID Hardware Monitor Pro: in linea di massima vi è una differenza di circa 4/5 °C in più sui dati del registro della CPU. Se trovo la documentazione AMD in merito la posto. Grazie mille.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1273
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Accesso diretto alla CPU in HARDWARE
« Risposta #7 il: Maggio 23, 2023, 11:28:40 pm »
Se non vado errato, qualche tempo fa lessi qualcosa sulla temperatura massima delle CPU AMD: mi pare fosse 95 gradi Celsius, quindi al posto di 100 devi inserire 95 nella espressione.

Ciao

:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 788
  • Latest: mastro
Stats
  • Post in totale: 18836
  • Topic in totale: 2243
  • Online Today: 48
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 27
Total: 27

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.