Cadangan wilayah memori RAM tetap sebagai perangkat blok (dengan alamat fisik awal yang diberikan)


11

Ada banyak pertanyaan tentang RAM Disk dan saya menyadari ramf dan tmpf yang memungkinkan penggunaan ram sebagai perangkat blok. Namun minat saya adalah menggunakan rentang alamat memori tetap sebagai perangkat blok.

Ini muncul dari keharusan untuk menggunakan RAM non-volatile yang tersedia di sistem saya. Saya memiliki 6GB RAM tersedia, dan 8GB RAM non-volatile hadir. Output dari / proc / iomem memberi saya yang berikut ini

100000000-17fffffff: Sistem RAM

180000000-37fffffff: dilindungi undang-undang

Di sini wilayah dari 6GB hingga 14GB sesuai dengan wilayah RAM Non-volatil yang ditandai oleh peta memori BIOS E820 sebagaimana dicadangkan. Tujuan utama saya adalah menggunakan NVRAM ini sebagai perangkat blok di linux. Ini berguna untuk menguji sistem NVRAM. Apakah ada perintah linux yang sudah ada yang akan memungkinkan saya untuk menggunakan wilayah ini sebagai perangkat blok, atau apakah saya harus menulis driver perangkat kernel saya sendiri untuk memfasilitasi hal yang sama?


2
Hanya ingin tahu, mengapa Anda ingin melakukan ini?
mtak

Ini memberikan cara mudah untuk menguji sistem file yang dirancang untuk RAM Non-Volatile di linux.
qstack

Jawaban:


2

Saya bukan ahli driver perangkat, namun berikut adalah beberapa petunjuk untuk R&D Anda:

  1. jika memori ditandai sebagai "disimpan", OS tidak dapat menyentuhnya; Anda harus menemukan cara apakah BIOS menandainya sebagai tersedia untuk OS, atau menggunakan ioctl tingkat rendah langsung untuk mengendalikannya
  2. jika Linux dapat melihat memori, Anda masih tidak akan memiliki cara mudah untuk mencegah Linux menggunakannya sebagai blok RAM lain; suatu upaya dapat dicoba dengan menandai RAM seperti "buruk" dan kemudian memodifikasi kernel untuk tetap memanfaatkannya secara khusus (silakan periksa dokumentasi kernel mengenai hal ini, itu telah banyak berubah sejak terakhir kali saya meretasnya dan berkembang dengan kecepatan tinggi)
  3. mempertimbangkan hal di atas sebagai studi kelayakan awal (dan non-definitif atau lengkap), saya akan mengatakan menulis driver ramdisk blockdevice Anda adalah pilihan paling waras dalam kasus Anda, dan mungkin Anda harus berkontribusi kembali ke kernel Linux dan / atau bekerja sama dengan orang sudah mencoba ini (mungkin tempat yang lebih baik untuk pertanyaan ini adalah Linux Kernel Mailing List , jika Anda belum memposting di sana)

Beberapa sumber lain yang relevan:


1

Sebelum pengenalan tmpfs/ initramfsada ramdiskdigunakan untuk memuat initrdgambar, perangkat blok ukuran tetap yang telah ditentukan, saya pikir bersebelahan, setidaknya pada implementasi sebelumnya.

Block driver itu sendiri tidak memiliki parameter untuk alamat memori, hanya ukurannya, tetapi kernel yang digunakan untuk memuat gambar initrd pada alamat yang telah ditentukan (dengan konfigurasi) sehingga mengintip kode kernel utama / init dapat membantu (saya akan terkejut jika ramdisk tidak didukung lagi untuk initrd tetapi karena initramfs sudah ada, bertahun-tahun sekarang, tidak pernah menggunakan ramdisk lagi).

Sumber pengemudi adalah driver / blok / rd.c , jika saya melihat dengan benar sekarang adalah driver / blok / brd.c .

Lain, mencari ramdisk saya menemukan implementasi yang terlihat menarik:

Disk pada RAM - Bermain dengan Block Drivers

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.