Polecenie powłoki do odczytu rejestrów urządzeń?


18

Czy na komputerze jednopłytkowym z systemem Linux można odczytać zawartość rejestrów konfiguracji urządzeń sterujących sprzętem? Myślę, że byłoby to opakowanie inw().

Szukam czegoś równoważnego mdkomendzie dump ( ) pamięci U-boot , do użycia w kontekście debugowania sterownika.


2
Może to pomóc, ale koniecznie przeczytaj cały wątek: lists.arm.linux.org.uk/lurker/message/...
Gilles „SO- przestań być zły”

Wszelkie aktualizacje na ten temat?
Sen

@Sen: Negative. Nadal jestem zakłopotany. Przeczytałem połączony wątek, co sugeruje, że inw () nie robi tego, co myślałem: „inb () i przyjaciele służą tylko do emulacji przestrzeni adresowej PCI i ISA IO”. Używam oscyloskopu i czytam dużo kodu sterownika jądra jako moich następnych najlepszych opcji.
pingswept,

Odpowiedzi:


14

Jeśli znasz adres fizyczny urządzenia, możesz użyć devmem2.

devmem2 <physical address> <size (b/h/w)> [value]

3

Nie wiem, czy możesz to zrobić bezpośrednio z jądrem wanilii.

Ale napisanie prostego sterownika, który używa „pliku” w / proc do eksportowania zawartości pamięci, którą chcesz zobaczyć, powinno być dość proste.

Następnie możesz odczytać „plik” za pomocą prostego skryptu i mieć dostęp do tej pamięci.


1

Mogę się całkowicie i całkowicie mylić w tej sprawie i wybacz mi, jeśli tak, ale jeśli polecenie md uboot po prostu odczytuje adresy pamięci mapowane na rejestry urządzeń i zwraca ci zawartość, czy nie możesz odczytać tych samych lokalizacji pamięci przy sprytnym użyciu z dd if=/dev/mem ...?


Myślę, że ta droga ma potencjał, ale wydaje się, że jest problem. Ta komenda wykonana jako root: „dd if = / dev / mem bs = 1 skip = 10000 count = 512” daje następujący błąd: „dd: / dev / mem: Bad address” Nie jestem pewien, co to znaczy. Google mówi mi, że ma to coś wspólnego ze zmianami wprowadzonymi w jądrze 2.6, ale nie rozumiem jeszcze wystarczająco dużo, aby to obejść.
pingswept

1
Może spróbuj użyć sterownika mtdblock. Sprawdź to: en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap Ale zamiast skierować go na pamięć RAM karty graficznej, może spróbuj skierować go do rejestrów urządzenia.
LawrenceC

0

Czy konfiguracja urządzenia PCI jest w / sys / bus / pci / devices / * / config jakiejkolwiek pomocy?


2
To naprawdę komentarz, a nie odpowiedź na pytanie. Użyj „dodaj komentarz”, aby zostawić opinię autorowi.
Renan

@Renan „To naprawdę komentarz” Prawdopodobnie niezamierzony, ale zabawny, niezależnie od tego. +1 za rozjaśnienie mojego dnia za pomocą tautologii. edytuj: Właśnie zdałem sobie sprawę, że może to być sarkastyczne. Nie mam tego na myśli.
rootowanie

0

busybox devmem

busybox devmemczy moja preferowana wersja devmem2została wymieniona na: stronie /unix//a/134661/32558

devmem2 pojawiło się w wielu różnych wersjach z kilku upstamsów, zwłaszcza Buildroot http://free-electrons.com/pub/mirror/devmem2.c

Ale narzędzie Busybox jest bardziej kanoniczne, szeroko dostępne i utrzymywane.

Na przykład devmem2został odrzucony z Debiana: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (ale mimo to utworzono pakiet Ubuntu).

Możesz go pobrać w Ubuntu za pomocą:

sudo apt-get install busybox

Zastosowanie: odczyt 4 bajty z adresu fizycznego 0x12345678:

sudo busybox devmem 0x12345678

Napisz 0x9abcdef0na ten adres:

sudo busybox devmem 0x12345678 w 0x9abcdef0

Oto kilka fajnych sposobów na przetestowanie devmem: /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890


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.