Было много вопросов о RAM-дисках, и мне известны ramfs и tmpfs, которые позволяют использовать ram в качестве блочного устройства. Однако меня интересует использование фиксированного диапазона адресов памяти в качестве блочного устройства.
Это связано с необходимостью использования энергонезависимой оперативной памяти, доступной в моей системе. У меня есть 6 ГБ оперативной памяти и 8 ГБ энергонезависимой памяти. Вывод / proc / iomem дает мне следующее
100000000-17fffffff: ОЗУ системы
180000000-37fffffff: зарезервировано
Здесь область от 6 до 14 ГБ соответствует области энергонезависимой памяти, которая помечена картой памяти E820 BIOS как зарезервированная. Мое главное намерение - использовать этот NVRAM в качестве блочного устройства в Linux. Это полезно для тестирования систем NVRAM. Существует ли какая-либо команда linux, которая позволила бы мне использовать этот регион в качестве блочного устройства, или мне нужно написать собственный драйвер устройства ядра, чтобы облегчить то же самое?
Ответы:
Я не эксперт по драйверам устройств, но вот несколько советов для ваших исследований и разработок:
Некоторые другие соответствующие источники:
источник
До введения
tmpfs
/initramfs
тамramdisk
использовалась для загрузкиinitrd
изображений заранее заданная блочная аппаратура фиксированного размера, я думаю, смежная, по крайней мере, в более ранних реализациях.Сам драйвер блока не имеет параметров для адреса памяти, только размер, но ядро, используемое для загрузки образов initrd по заранее определенному адресу (по конфигурации), так что заглядывание в код ядра main / init может помочь (я хотел бы удивитесь, если ramdisk больше не поддерживается для initrd, но поскольку initramfs существует, много лет назад никогда больше не использовал ramdisk ).
Источник водитель водителей / блок / rd.c , если я вижу , правильно сейчас драйверы / блок / brd.c .
Еще, в поисках ramdisk я нашел реализацию, которая выглядит интересно:
Диск в ОЗУ - игра с блочными драйверами
источник