Było wiele pytań na temat dysków RAM i znam ramfs i tmpfs, które pozwalają na użycie ram jako urządzenia blokowego. Jednak moim zainteresowaniem jest użycie stałego zakresu adresów pamięci jako urządzenia blokowego.
Wynika to z konieczności używania nieulotnej pamięci RAM dostępnej w moim systemie. Mam 6 GB dostępnej pamięci RAM i 8 GB nieulotnej pamięci RAM. Dane wyjściowe / proc / iomem dają mi następujące informacje
100000000-17fffffff: System RAM
180000000-37fffffff: zarezerwowany
Tutaj region od 6 GB do 14 GB odpowiada nieulotnemu regionowi RAM, który jest oznaczony jako mapa pamięci E820 BIOS jako zarezerwowana. Moim głównym celem jest użycie tej pamięci NVRAM jako urządzenia blokowego w systemie Linux. Jest to przydatne do testowania systemów NVRAM. Czy jest już jakieś polecenie linux, które pozwoliłoby mi użyć tego regionu jako urządzenia blokowego, czy też muszę napisać własny sterownik urządzenia jądra, aby to ułatwić?
Odpowiedzi:
Nie jestem ekspertem od sterowników urządzeń, ale oto kilka wskazówek dotyczących badań i rozwoju:
Niektóre inne istotne źródła:
źródło
Przed wprowadzeniem
tmpfs
/initramfs
tamramdisk
ładowanoinitrd
obrazy, urządzenia blokowe o ustalonym rozmiarze o stałym rozmiarze, myślę, że są ciągłe, przynajmniej we wcześniejszych implementacjach.Sam sterownik bloku nie ma parametrów adresu pamięci, tylko rozmiar, ale jądro używane do ładowania obrazów initrd pod wcześniej zdefiniowanym adresem (przez config), więc zajrzyj do kodu jądra main / init (pomogłbym zdziw się, jeśli ramdysk nie są już wspierane przez initrd ale ponieważ initramfs jest wokół, wiele lat, nigdy nie używany ramdysk już).
Źródłem kierowca był drivers / block / rd.c , jeśli widzę teraz jest poprawnie sterowniki / block / brd.c .
W przeciwnym razie szukając ramdysku znalazłem implementację, która wygląda interesująco:
Dysk w pamięci RAM - gra ze sterownikami blokowymi
źródło