Зарезервуйте фіксовану область пам’яті оперативної пам’яті як блок пристрою (із заданою стартовою фізичною адресою)


11

Про диски оперативної пам’яті було багато питань, і я знаю ramfs та tmpfs, які дозволяють використовувати оперативні пам’яті як блочний пристрій. Однак мій інтерес полягає у використанні фіксованого діапазону адрес пам'яті як блочного пристрою.

Це виникає з необхідності використання енергонезалежних оперативної пам’яті, наявних у моїй системі. У мене є 6 ГБ оперативної пам’яті і 8 ГБ енергонезалежної ОЗУ. Вихід / proc / iomem дає мені таке

100000000-17fffffff: системна оперативна пам'ять

180000000-37fffffff: зарезервовано

Тут область від 6 ГБ до 14 ГБ відповідає енергонезалежній області ОЗУ, яка позначена карткою пам'яті BIOS E820 як зарезервована. Головний мій намір - використовувати цю NVRAM в якості блочного пристрою в Linux. Це корисно для тестування систем NVRAM. Чи є вже якась команда linux, яка б дозволила мені використовувати цей регіон як блоковий пристрій, або мені потрібно написати власний драйвер пристрою ядра, щоб полегшити те саме?


2
Просто цікаво, навіщо ви хочете це робити?
mtak

Це забезпечує простий спосіб тестування файлових систем, розроблених для енергонезалежної ОЗУ на Linux.
qstack

Відповіді:


2

Я не є експертом у драйверах пристроїв, однак ось декілька покажчиків для вашої НДДКР:

  1. якщо пам'ять позначена як "зарезервована", ОС не може її торкнутися; вам доведеться знайти спосіб позначити BIOS як доступний для ОС, або використовувати прямий ioctl s низького рівня для управління ним
  2. якби Linux міг бачити пам'ять, у вас все одно не було б легкого способу запобігти використанню Linux як будь-якого іншого блоку оперативної пам’яті; спробу можна спробувати, позначивши таку оперативну пам'ять як "погану", а потім змінивши ядро, щоб все-таки використати спеціальне використання (будь ласка, перевірте документацію ядра щодо цього, вона сильно змінилася з моменту, коли я останній раз зламав її, і вона розвивається з великою швидкістю)
  3. розглядаючи вищезазначене як попереднє (і не остаточне, ні вичерпне) дослідження техніко-економічного обґрунтування, я б сказав, що написання вашого драйвера пристрою ramdisk blockdevice є найбільш розумним варіантом у вашому випадку, і, можливо, вам слід додати його назад до ядра Linux та / або об'єднатися з люди вже намагаються це (можливо, кращим місцем для цього питання є список розсилки ядра Linux , якщо ви ще не опублікували його)

Деякі інші відповідні джерела:


1

Перед введенням tmpfs/ initramfsтам ramdiskвикористовувались для завантаження initrdзображень, заздалегідь визначених пристроїв блоку фіксованого розміру, я вважаю суміжними, принаймні на попередніх реалізаціях.

Сам драйвер блоку не має параметрів для адреси пам'яті, лише розмір, але ядро, яке використовується для завантаження initrd зображень за попередньо визначеною адресою (за допомогою конфігурації), тому заглянути в основний / ініт- код ядра може допомогти (я б будьте здивовані, якщо ramdisk більше не підтримується для initrd, але оскільки initramfs вже існує, багато років, більше ніколи не використовували ramdisk ).

Джерело водій водіїв / блок / rd.c , якщо я бачу , правильно зараз драйвери / блок / brd.c .

Ще, шукаючи ramdisk, я знайшов реалізацію, яка виглядає цікавою:

Disk on RAM - Гра з драйверами блоків

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.