Existem muitas perguntas sobre discos RAM e eu conheço os ramfs e tmpfs que permitem o uso do ram como um dispositivo de bloco. No entanto, meu interesse é usar um intervalo de endereços de memória fixo como um dispositivo de bloco.
Isso decorre da necessidade de usar RAM não volátil disponível no meu sistema. Tenho 6 GB de RAM disponível e 8 GB de RAM não volátil presente. A saída de / proc / iomem me fornece o seguinte
100000000-17fffffff: RAM do sistema
180000000-37fffffff: reservado
Aqui, a região de 6 GB a 14 GB corresponde à região de RAM não volátil, marcada pelo mapa de memória do E820 BIOS como reservada. Minha principal intenção é usar esta NVRAM como um dispositivo de bloco no linux. Isso é útil para testar sistemas NVRAM. Existe algum comando linux já presente que me permita usar essa região como um dispositivo de bloco ou preciso escrever meu próprio driver de dispositivo do kernel para facilitar o mesmo?
Respostas:
Eu não sou especialista em drivers de dispositivo, no entanto, aqui estão alguns indicadores para sua pesquisa e desenvolvimento:
Algumas outras fontes relevantes:
fonte
Antes da introdução de
tmpfs
/initramfs
houveramdisk
o carregamento dasinitrd
imagens, um bloco de tamanho fixo pré-definido, acho contíguo, pelo menos em implementações anteriores.O driver de bloco em si não possui parâmetros para o endereço de memória, apenas o tamanho, mas o kernel costumava carregar imagens initrd em um endereço predefinido (por config) para que uma espiada no código principal / init do kernel pudesse ajudar (eu fique surpreso se o ramdisk não for mais suportado pelo initrd, mas como o initramfs existe, há muitos anos, nunca mais utilizou o ramdisk ).
A fonte motorista estava drivers / block / rd.c , se eu ver correctamente agora é drivers / block / brd.c .
Senão, procurando por ramdisk , encontrei uma implementação que parece interessante:
Disco na RAM - Tocando com drivers de bloco
fonte