Linux, Pytania-10


Przepis na włączenie dodatkowej pamięci (VRAM) do obiegu systemu.

1. Wymagania

Do przeprowadzenia eksperymentu niezbędne są

2. Przygotowanie

Aby przygotować się do eksperymentu, należy okres lic gdzie w przestrzeni adresowej PCI znajduje się pamięć VRam karty graficznej. Można to zrobić na kilka sposobów:

Capabilities: [44] AGP version 2.0

Są dwa potencjalne miejsca w których należy szukać bufora VRAM. W tym wypadku jeden z wpisów określa położenie w pamięci rejestrów karty. Żeby poznać więcej szczegółów, należy spojrzeć na kolejny podpunkt.

(--) NV(0): Linear framebuffer at 0xD4000000

Widać wiec, ze bufor ramki znajduje się pod fizycznym adresem 0xd4000000. Znając wielkość pamięci karty graficznej jesteśmy gotowi do eksperymentu.

3. Konfiguracja MTD

MTD, czyli Memory Technology Devices to wspaniale narzędzie ułatwiające współpracę linuksa z pamięciami Flash, urządzeniami typu DoC (Disk On Chip). Przydatne jest tez w naszym przypadku.

Jeden z elementów tego systemu obsługuje urządzenia RAM. Intencja autorów było w rzeczywistości unikniecie często spotykanej na starszych płytach sytuacji, gdzie Cache drugiego poziomu obsługiwał tylko część podłączonej pamięci. Dostęp do takiej pamięci jest dużo wolniejszy, dlatego często zalecano użytkownikom sztuczne ograniczenie dostępnego linuksowi ramu za pomocą parametru mem= przekazywanego kernelowi. Pozostała część pamięci można wykorzystać właśnie jako urządzenie RAM w MTD.

Potrzebny nam jest moduł slram.o (opcja CONFIG_MTD_SLRAM), oraz mtdcore.o mtdchar.o i mtdblock.o (ten ostatni przyda się, jeśli na dodatkowej pamięci zechcemy zainstalować jakiś system plików).

4. Kilka obliczeń na początek

XFree86 odczytuje informacje o położeniu burofa ramki z konfiguracji PCI karty graficznej. Stąd wniosek, iż jeśli sztucznie ograniczy się jej ilość, sterownik będzie korzystał tylko z jej części, znajdującej się na początku. Należy wiec policzyć sobie, ile pamięci przekażemy dla XFree86. Reszta będzie na nasz użytek.

Ilość potrzebnej pamięci zależy bezpośrednio od największej używanej rozdzielczości. Najprościej (ale i prawdopodobnie z błędami) będzie pomnożyć szerokość przez wysokość ekranu, a wynik pomnożyć jeszcze raz przez ilość bajtów przypadających na jeden punkt na ekranie (dla obrazów 24-bitowych jest to najczęściej nie 3 a 4 bajty na punk). Należy oczywiście pamiętać, ze jeżeli korzysta się jednocześnie z konsoli na framebufferze, jej rozmiar tez uwzględnić przy rachunkach (liczy się jego rozdzielczość w punktach).

Załóżmy, ze dla XFree86 oddamy 4MB pamięci graficznej (0x00400000 bajtów). Jeśli bufor ramki zaczyna się pod adresem 0xd4000000, to pamięć dla nas zacznie się od (0xd4000000 + 0x00400000) 0xd4400000. Wiemy juz, gdzie ona leży i wiemy ile możemy jej przydzielić.

5. Poprawka w XF86Config

Pozostał jeden drobny szczegół do poprawienia. XFree86 przy starcie sam spróbuje wykryć, ile pamięci ma karta graficzna. Jest to teraz jak najbardziej nie na rękę. Należy wiec w sekcji Device dopisać linijkę

VideoRam 4096

(jeśli przeznaczyliśmy serwerowi 4MB pamięci). Należy dopilnować, aby serwer działał (o ile musi) korzystając z poprawionej konfiguracji.

*UWAGA* Sterowniki binarne do kart nVidii ignorują ten parametr i zawsze same określają wielkość pamięci video na karcie. Dlatego tez nie da się ich tutaj wykorzystać.

6. Narodziny urządzenia MTD

Wszystko juz gotowe. Można wiec rozpocząć:

meehow:~# modprobe slram map=VRAM,0xd4400000,+0x00c00000

Znaczek plus przy liczbie 0x00c00000 oznacza, że określa ona wielkość bloku pamięci, a nie adres końcowy.

Moja karta graficzna ma 16MB pamięci, 4MB przeznaczyłem dla XFree86, reszta (12MB - 0xc00000) przeznaczona zostanie na urządzenie MTD. Rzut okiem, czy odnieśliśmy sukces:

meehow:~# cat /proc/mtd

dev: size erasesize name

mtd0: 00b00000 00010000 "VRAM"

Brawo! Urządzenie mtd0 dostępne. Jak się do niego dostać? Bardzo prosto. Jeśli chcemy odwoływać się do niego, jak do urządzenia znakowego, musimy załadować moduł mtdchar (modprobe mtdchar) i utworzyć odpowiednie urządzenie za pomocą komendy mknod. W moim wypadku:

meehow:~# mknod /dev/mtd0 c 90 0

Jeśli zaś chcemy, aby zachowywało się jak urządzenie blokowe, na którym można zamontować system plików, to ładujemy mtdblock (modprobe mtdblock) i tworzymy odpowiednie urządzenie blokowe:

meehow:~# mknod /dev/mtdblock0 b 31 0

To wszystko. Urządzenie działa i jest gotowe do pracy.

7. Co ja z tym zrobię?

Wymyślając te metodę wpadły mi do głowy dwa rozwiązania. Pierwsze z nich, to założenie jakiegoś systemu plików, np:

meehow:~# mkfs.ext2 /dev/mtdblock0

Lub utworzenie partycji swap i dodanie jej do systemu:

meehow:~# mkswap /dev/mtdblock0

Setting up swapspace version 1, size = 12582912 bytes

meehow:~# swapon /dev/mtdblock0

Życzę miłego eksperymentowania

Michał Schulz



Wyszukiwarka

Podobne podstrony:
10 Linux PYTANIA SPRAWDZAJĄCE
Pytania 6 10
Opracowane pytanie 1 10 STP
Pytania (10)
Linux, Pytania-15
Fianse Publiczne, pytanie 10, REJS MAJOWY 26
Linux, Pytania-3
Linux, Pytania-2
klima pytania, 7 8 9 10 11 12
Historia pytania 1 10
Pytanie 10, wojtek studia, Automatyka, studia 2010, obrona inz, Obrona
druk pytania 10
miedzynarodowe pytania 10 (1 termin i zerowka)
elektromag pytania 10 11 www przeklej pl
pytania 10 odlewnictwo
pytania? 10 odp
obrobka ubytkowa pytania 10
Linux, Pytania-14
Linux, Pytania-13

więcej podobnych podstron