Jak mogę sprawdzić, jaki zakres adresów pamięci RAM jest używany przez Uboot?


12

Jestem w trybie rozruchowym i zastanawiałem się, jak mogę określić, jaki zakres adresów RAM jest używany przez moduł rozruchowy.

uboot potrzebuje pamięci do działania, więc może używać części pamięci RAM. Chcę uniknąć modyfikacji tych adresów RAM.

Skąd mam wiedzieć, który region pamięci jest załadowany?

Odpowiedzi:


2

Strona DULG DebuggingUBoot ma to do powiedzenia („relokacja”, o której mówi, to kopiowanie się z pamięci flash do pamięci RAM).

W celu debugowania U-Boot po przeniesieniu musimy znać adres, na który przenosi się U-Boot. Gdy nie używa się żadnych egzotycznych funkcji, takich jak PRAM, zwykle jest to adres - CONFIG_SYS_MONITOR_LEN. W naszym przykładzie z 16 MB pamięci RAM i CONFIG_SYS_MONITOR_LEN = 192 KB daje to adres 0x1000000 - 0x30000 = 0xFD0000.

Dalsza lektura tekstu wydaje się wskazywać, że jest on zależny od procesora lub płyty głównej i że może być konieczne sprawdzenie źródła U-Boot, aby się upewnić.

W odniesieniu do Guruplug :

Po stronie RAM u-Boot ma zarezerwowane pierwsze 8 megabajtów. Reszta jest darmowa. Niektórzy programiści załadują jądra i systemy plików w rozdzielczości 0 × 800000 w celu zaprogramowania flashowania. Innym częstym miejscem jest granica 100 megabajtów (lub przesunięcie 0 × 640000).

W zależności od wersji komendy U-Boot mogą być dostępne, aby umieścić łańcuch gdzieś w wolnej pamięci RAM, a następnie wyszukać resztę pamięci RAM dla tego ciągu, ujawniając przybliżoną lokalizację U-Boot w pamięci.


1

Kiedy uruchamiam używaną wersję Uboota, automatycznie wyświetla „układ pamięci wirtualnego jądra”.

Memory: 859068k/859068k available, 25668k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xf9e00000 - 0xffe00000   (  96 MB)
    vmalloc : 0xe0800000 - 0xf4000000   ( 312 MB)
    lowmem  : 0x80000000 - 0xe0000000   (1536 MB)
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)
      .init : 0x80008000 - 0x8004d000   ( 276 kB)
      .text : 0x8004d000 - 0x808ad000   (8576 kB)
      .data : 0x808ce000 - 0x80937a40   ( 423 kB)

Odkryłem, że bezpiecznie jest używać obszaru lowmem do różnych procesów narzędziowych, które chciałem uruchomić (np. Ładowanie dużych plików do pamięci). Idealnie, myślę, że chcesz użyć wysokiej pamięci do tego rodzaju rzeczy, ale nie miałem takiej opcji (jak widać w moich wynikach).


Czy na pewno nie jest to mapa pamięci Linuksa?
Claymation

Nie jestem pewien. Ten brak highmem i odniesienie do „wirtualnego jądra” skłaniają mnie do myślenia inaczej. Jestem noob / hack, jeśli chodzi o uboot. Ważną kwestią było to, że byłem w stanie bezpiecznie korzystać z tego niskiego zakresu bez zapisywania niczego, co wydawałoby się wymagać od bootowania.
BuvinJ

O ile pamiętam, jest to wyświetlane przed załadowaniem systemu operacyjnego.
BuvinJ
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.