Czy można uzyskać informacje o drzewie urządzeń za pomocą / sys działającego jądra?


20

Drzewa urządzeń , zwykle w systemach uzbrojenia, dostarczają informacje o sprzęcie do jądra (Linux). Te drzewa urządzeń istnieją jako pliki dts (źródło drzewa urządzeń), które są kompilowane i ładowane do jądra. Problem polega na tym, że nie mam dostępu do takiego dtspliku, nawet do dtbpliku.

Mam dostęp do /sysi /procna maszynie i chciałem zapytać, czy to pozwoliłoby mi „odgadnąć prawidłowe wartości” do użycia w dts?

Potencjalna odpowiedź mogłaby dodatkowo uwypuklić aspekt, jeśli odpowiedź na to pytanie zależy również od tego, czy interfejs drzewa urządzeń został użyty w pierwszej kolejności (tj. dtbZostał utworzony i dostarczony do jądra) zamiast trochę więcej hackowania ”- po prostu odwracamy się od wanilii i załatać jądro, aby rozwiązać problem z informacjami o urządzeniu tylko dla naszego „jądra”?


Czy masz dostęp do obrazu rozruchowego? Stamtąd możesz wyodrębnić drzewo urządzeń. Mogę pomóc.
phk

Odpowiedzi:


27

/proc/device-tree lub /sys/firmware/devicetree/base

Myślę, że oba są pseudonimami, /sys/firmware/devicetree/basektóre prawdopodobnie są lepszym wyborem po oswojeniu /proc.

Następnie możesz uzyskać dostęp do właściwości dts z plików:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

Format wyjściowy liczb całkowitych jest binarny, więc hexdumpjest potrzebny.

dtc -I fs

Uzyskaj pełne drzewo urządzeń z systemu plików:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

wyprowadza dts na standardowe wyjście.

Zobacz także: Jak wyświetlić drzewo urządzeń jądra | Wymiana stosów Unix i Linux

dtc w Buildroot

Buildroot ma BR2_PACKAGE_DTC=ykonfigurację do umieszczenia dtcw głównym systemie plików.

QEMU -machine dumpdtb

Jeśli korzystasz z Linuksa wewnątrz QEMU, QEMU automatycznie generuje DTB, jeśli nie podasz tego wprost -dtb, więc może on również zrzucić bezpośrednio:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

jak wspomniano na stronie : https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

Testowane z tą instalacją QEMU + Buildroot w jądrze Linux v4.19 arm64.


4

Nie jestem pewien, czy dobrze cię rozumiem.

Jeśli korzystasz z systemu, który uruchomił się za pomocą dtb, twoje drzewo urządzeń powinno być dostępne wewnątrz debugfs.

Możesz także wypróbować narzędzia dtc Pantelisa Antoniou, zawierają one fdtdump i fdtget, które drukują dts z obiektu blob.

Jeśli w ogóle nie masz drzewa urządzeń i nie uruchomiłeś rozruchu z dtb, będziesz musiał samodzielnie przejść przez kod maszynowy i dodać wszystkie atrybuty i węzły specyficzne dla urządzenia do dts. Dla takiego rozruchu nie ma wygenerowanego drzewa urządzeń „syntetycznych”. Punktem wyjścia byłaby podobna maszyna lub rodzic, a następnie działająca po drodze system po systemie.


Dzięki, aby wyjaśnić. Jest szansa, że dtbmogą być dostępne za pośrednictwem przez debugfs jeszcze, że opierają się na CONFIG_DEBUG_FSw .configi nawet jeśli zestaw jeszcze na zwykłym kaprysem, że faktycznie stosowany jest dtbna początek, nie czytam tego prawa? Więc przy pewnym „pechu” nie zrobili tego i nie zastosowali jakiegoś bezpośredniego łatania jądra z interfejsem drzewa urządzeń, prawda? Oznaczałoby to, że w ostateczności należy zastosować kod maszynowy, ponieważ naruszają one GPLv2 i zamykają jądro, prawda?
humanityANDpeace

Tak i tak przez pierwsze dwa. Wreszcie IANAL, ale arch / ??? / mach - ??? / board - ???. C zawierałby specjalne urządzenia obecne dla maszyny w starszych jądrach. Powinno to być objęte GPL i musi być dostępne za opłatą. Poszczególne sterowniki urządzeń mogą być źródłem zamkniętym, bez naruszenia.
FRob
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.