Jak mogę przetestować pamięć RAM pod kątem uszkodzenia danych w systemie opartym na ARM?

20

Mam urządzenie osadzone. Jest oparty na ARM, z Linuksem 2.6.31 i ma 256 MB pamięci RAM.

Chciałem uzyskać kilka pomysłów / wskazówek na temat najskuteczniejszego sposobu testowania pamięci RAM urządzenia pod kątem uszkodzeń danych. Czy istnieje test / oprogramowanie, które ktoś może zaproponować?

Uwaga:

Mam teraz memtestera. Dostałem to po sugestii Ulricha Dangel'a (poniżej).

Teraz także mtestskonfigurowałem z Uboot.

Jakieś inne testy / podejścia, których mógłbym użyć?

Ankur Agarwal
źródło
2
Zauważ, że jest to procesor ARM, a nie x86; niestety Memtest86 + nie będzie działał w tym przypadku.
Renan
Mam memtestera. Jakieś inne testy / podejścia, których mógłbym użyć?
Ankur Agarwal
1
@abc czego jeszcze chcesz? myślę, że masz inne problemy, jeśli ta metoda nie przyniesie pożądanego rezultatu. mtestw zasadzie robi to samo co memtest86 +. Zasadniczo masz różne opcje, uruchom test pamięci z systemu operacyjnego, np. Linux (byłoby to, memtesterale możesz mieć problemy z testowaniem całego regionu fizycznego). Możesz także użyć jakiegoś mini-systemu (uboot) do przetestowania pamięci ( mtest)
Ulrich Dangel
Czy procesor Marvell? Mam to samo pytanie dotyczące procesora sieciowego Marvell, czyli dokładnie takiej samej konfiguracji (ARM / 256 MB RAM / Linux 2.6.31) jak Twoja.
Tim Wu
Oto podobne pytanie o przepełnienie stosu . Wszystkie testy tutaj mogą znaleźć pewne problemy. Nie znajdą wszystkich problemów i jest to bardzo trudne. Tylko bardzo dobre narzędzia do symulacji tablic i modelowanie mogą to zweryfikować; nie oprogramowanie. Jeśli tak się stanie, jedynym problemem będzie układ DDR (lub ewentualnie kontroler hosta), a memtester i mtest mogą je znaleźć. Jeśli jednak powiedzą, że wszystko jest w porządku; nie wykluczaj w 100% problemu z DDR.
bezgłośny hałas

Odpowiedzi:

21

Ogólnym rozwiązaniem do testowania pamięci jest zapisanie określonego wzorca podobnego 0xFFFFFFFFdo pamięci, a następnie odczytanie go i porównanie wyniku. Możesz i powinieneś oczywiście zmienić wzór, aby odkryć problemy. Niektóre rozwiązania, takie jak memtest86+generują losowe wzorce i zmieniają kierunek, w którym zapisują w pamięci. Aby uzyskać bardziej szczegółowe informacje na temat używanych algorytmów w memtest86, zobacz ich stronę techniczną . Wszystkie rozwiązania przedstawione w tym poście wykorzystują zasadniczo ten sam podstawowy pomysł.

Jeśli chcesz uruchomić test z poziomu Linuksa (wspomniałeś o Linuksie w swoim poście), spójrz na memtester i pakiet memtest, które powinny działać z ramieniem. Na początek powinieneś użyć memtestera, ponieważ robi on dokładnie to, co chcesz.

Testowanie pamięci z poziomu Linuksa ma pewne wady, takie jak brak możliwości przetestowania całej pamięci fizycznej, ponieważ jądro również potrzebuje pamięci. Aby przetestować pamięć za pomocą Uboot (jest znacznie mniejsza niż jądro Linuksa), spójrz na zintegrowane polecenie mtest . Pozwala określić zakres adresów, wzorzec i iterację. Dzięki mtest powinieneś być w stanie przeprowadzić dość obszerne testy bez polegania na systemie operacyjnym. Musisz tylko upewnić się, że używasz prawidłowych zakresów pamięci, w przeciwnym razie może być możliwe zastąpienie ubootregionu pamięci.

Jeśli testy dostarczone przez mtest nie są wystarczające, możesz oczywiście po prostu rozszerzyć Uboot i zintegrować dodatkowe funkcje testowania pamięci w Uboot.

Ulrich Dangel
źródło
OK, dostałem memtestera. Jakieś inne testy, które mogę wykonać?
Ankur Agarwal
1
Jakieś inne podejścia testowe, które mógłbym wypróbować? Mam na myśli testowanie pamięci RAM z poziomu Uboot.
Ankur Agarwal
@abc ok, dodałem notatkę o poleceniu uboots mtest
Ulrich Dangel
1
Zacząłem używać poleceń Uboot i teraz widzę, że polecenie Uboot wyświetla się w pamięcibist > md.w 0x00000023 10 00000023:
Ankur Agarwal
U-boot ma wsparcie dla dwóch różnych MTTEST. Skompiluj z CONFIG_SYS_ALT_MEMTEST, aby przeprowadzić bardziej rozbudowane testy pamięci niż domyślne.
m__