Riserva regione di memoria RAM fissa come dispositivo a blocchi (con un determinato indirizzo fisico iniziale)


11

Ci sono state molte domande sui dischi RAM e sono a conoscenza di ramfs e tmpfs che consentono l'uso di ram come dispositivo a blocchi. Tuttavia il mio interesse è usare un intervallo di indirizzi di memoria fisso come dispositivo a blocchi.

Ciò deriva dalla necessità di utilizzare la RAM non volatile disponibile nel mio sistema. Ho 6 GB di RAM disponibili e 8 GB di RAM non volatile presente. L'output di / proc / iomem mi dà quanto segue

100000000-17fffffff: RAM di sistema

180000000-37fffffff: riservato

Qui la regione da 6 GB a 14 GB corrisponde alla regione RAM non volatile che è contrassegnata dalla mappa di memoria BIOS E820 come riservata. La mia intenzione principale è quella di utilizzare questa NVRAM come dispositivo a blocchi in Linux. Ciò è utile per testare i sistemi NVRAM. Esiste già un comando linux che mi consentirebbe di utilizzare questa regione come dispositivo a blocchi, o devo scrivere il mio driver del dispositivo kernel per facilitare lo stesso?


2
Solo curioso, perché vorresti farlo?
martedì

Fornisce un modo semplice per testare filesystem progettati per RAM non volatile su Linux.
qstack,

Risposte:


2

Non sono un esperto di driver di dispositivo, tuttavia ecco alcuni suggerimenti per la tua ricerca e sviluppo:

  1. se la memoria è contrassegnata come "riservata", il sistema operativo non può toccarla; dovrai trovare un modo per fare in modo che il BIOS lo contrassegni come disponibile per il sistema operativo, oppure utilizzare ioctl diretti di basso livello per controllarlo
  2. se Linux potesse vedere la memoria, non avresti ancora un modo semplice per impedire a Linux di usarla come qualsiasi altro blocco di RAM; un tentativo potrebbe essere provato contrassegnando tale RAM come "non valida" e quindi modificando il kernel in modo che ne faccia ancora un uso speciale (si prega di controllare la documentazione del kernel riguardo a questo, è cambiata molto dall'ultima volta che l'ho violato e si sta evolvendo ad una grande velocità)
  3. considerando quanto sopra come uno studio preliminare (e non definitivo né esaustivo) di fattibilità, direi che scrivere il tuo driver ramdisk blockdevice è l'opzione più sana nel tuo caso, e forse dovresti restituirlo al kernel Linux e / o fare squadra con persone che già lo provano (forse un posto migliore per questa domanda è la mailing list del kernel Linux , se non hai ancora pubblicato lì)

Alcune altre fonti rilevanti:


1

Prima dell'introduzione di tmpfs/ initramfslì è stato ramdiskutilizzato per caricare le initrdimmagini, un dispositivo predefinito a blocchi di dimensioni fisse, penso contiguo, almeno su implementazioni precedenti.

Il driver del blocco stesso non ha parametri per l'indirizzo di memoria, ma solo le dimensioni, ma il kernel usava caricare le immagini initrd in un indirizzo predefinito (tramite la configurazione), quindi una sbirciatina nel codice del kernel main / init potrebbe aiutare (Vorrei sii sorpreso se ramdisk non è più supportato da initrd ma dato che initramfs è in circolazione, ormai da molti anni, Ramdisk non lo usa più).

La fonte conducente era drivers / block / rd.c , se vedo correttamente ora è drivers / block / brd.c .

Altrimenti, cercando ramdisk ho trovato un'implementazione che sembra interessante:

Disco su RAM - Giocare con i driver di blocco

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.