Ha habido muchas preguntas sobre los Discos RAM y estoy al tanto de ramfs y tmpfs que permiten el uso de ram como dispositivo de bloque. Sin embargo, mi interés está en usar un rango fijo de direcciones de memoria como un dispositivo de bloque.
Esto surge de la necesidad de usar RAM no volátil disponible en mi sistema. Tengo 6 GB de RAM disponibles y 8 GB de RAM no volátil. La salida de / proc / iomem me da lo siguiente
100000000-17fffffff: RAM del sistema
180000000-37fffffff: reservado
Aquí la región de 6GB a 14GB corresponde a la región RAM no volátil que está marcada por el mapa de memoria del BIOS E820 como reservado. Mi intención principal es usar esta NVRAM como un dispositivo de bloque en Linux. Esto es útil para probar sistemas NVRAM. ¿Hay algún comando de Linux ya presente que me permita usar esta región como un dispositivo de bloque, o tengo que escribir mi propio controlador de dispositivo kernel para facilitarlo?
Respuestas:
No soy un experto en controladores de dispositivos, sin embargo, aquí hay algunos consejos para su I + D:
Algunas otras fuentes relevantes:
fuente
Antes de la introducción de
tmpfs
/initramfs
there seramdisk
utilizó para cargar lasinitrd
imágenes, un dispositivo de bloque de tamaño fijo predefinido, creo contiguo, al menos en implementaciones anteriores.El controlador de bloque en sí no tiene parámetros para la dirección de memoria, solo el tamaño, pero el kernel solía cargar imágenes initrd en una dirección predefinida (por configuración), por lo que un vistazo al código del kernel main / init podría ayudar (lo haría se sorprenderá si ramdisk ya no es compatible con initrd, pero dado que initramfs existe, hace muchos años, nunca más usó ramdisk ).
La fuente conductor era drivers / block / rd.c , si veo correctamente ahora es drivers / block / brd.c .
De lo contrario, buscando ramdisk encontré una implementación que parece interesante:
Disco en RAM - Jugar con controladores de bloque
fuente