Sabit RAM bellek bölgesini bir blok cihaz olarak ayır (belirli bir başlangıç ​​fiziksel adresiyle)


11

RAM Diskleri hakkında birçok soru vardı ve ram'lerin bir blok cihaz olarak kullanılmasına izin veren ramfs ve tmpfs'nin farkındayım. Ancak benim ilgim blok cihaz olarak sabit bellek adres aralığını kullanmak.

Bu, sistemimde bulunan geçici olmayan RAM kullanma zorunluluğundan kaynaklanır. Kullanabileceğim 6GB RAM ve 8GB kalıcı RAM var. / Proc / iomem çıktısı bana şunu verir:

100000000-17fffffff: Sistem RAM'i

180000000-37fffffff: ayrılmış

Burada 6GB ile 14GB arasındaki bölge, E820 BIOS bellek haritası tarafından ayrılmış olarak işaretlenen kalıcı RAM bölgesine karşılık gelir. Asıl amacım bu NVRAM'ı linux'da bir blok cihazı olarak kullanmak. Bu, NVRAM sistemlerini test etmek için kullanışlıdır. Bu bölgeyi bir blok cihaz olarak kullanmama izin veren herhangi bir linux komutu var mı veya bunu kolaylaştırmak için kendi çekirdek aygıt sürücümü yazmak zorunda mıyım?


2
Sadece merak ediyorum, neden bunu yapmak istesin?
mtak

Linux'ta Uçucu Olmayan RAM için tasarlanmış dosya sistemlerini test etmenin kolay bir yolunu sunar.
qstack

Yanıtlar:


2

Aygıt sürücülerinde uzman değilim, ancak Ar-Ge'niz için bazı işaretçiler:

  1. bellek "ayrılmış" olarak işaretlenmişse, işletim sistemi belleğe dokunamaz; BIOS'u işletim sistemi tarafından kullanılabilir olarak işaretlemenin bir yolunu bulmanız veya kontrol etmek için doğrudan düşük seviyeli ioctl'leri kullanmanız gerekecektir .
  2. Linux hafızayı görebilseydi , Linux'un onu başka bir RAM bloğu olarak kullanmasını önlemenin kolay bir yolu olmazdı; bu RAM'i "kötü" olarak işaretleyerek ve daha sonra çekirdeği hala özel bir şekilde kullanacak şekilde değiştirerek bir deneme denenebilir (lütfen bununla ilgili çekirdek belgelerini kontrol edin, son hack'imden bu yana çok değişti ve gelişiyor büyük bir hızla)
  3. Yukarıdakileri bir ön (ve kesin olmayan veya kapsamlı) bir fizibilite çalışması olarak düşünürsek, ramdisk blockdevice sürücünüzü yazmanın sizin durumunuzdaki en akılcı seçenek olduğunu söyleyebilirim ve belki de Linux çekirdeğine ve / veya ekip çalışmasına katkıda bulunmalısınız. bunu zaten deneyen insanlar (belki de bu soru için daha iyi bir yer , henüz göndermediyseniz Linux Çekirdek Posta listesidir )

İlgili diğer bazı kaynaklar:


1

Uygulamasının başlamasından önce tmpfs/ initramfsorada edildi ramdiskyüklemek için kullanılır initrdgörüntüleri, önceden tanımlanmış sabit boyutlu blok aygıtları, ben en azından önceki uygulamaların üzerinde, bitişik düşünüyorum.

Blok sürücüsünün kendisi bellek adresi için parametreleri içermez, sadece boyuttur, ancak initrd görüntülerini önceden tanımlanmış bir adrese (config) yüklemek için kullanılan çekirdek, böylece ana / init çekirdek koduna bir göz atmak yardımcı olabilir (I ramdisk artık initrd için desteklenmiyorsa şaşırtınız, ancak initramfs etrafta olduğu için, birçok yıl, artık ramdisk kullanmamıştı ).

Sürücü kaynağı oldu sürücüleri / blok / rd.c Doğru şimdi görürseniz, sürücüler / blok / brd.c .

Başka, ramdisk arıyorum İlginç görünen bir uygulama buldum:

Diskteki RAM - Blok Sürücülerle Oynama

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.