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 dts
pliku, nawet do dtb
pliku.
Mam dostęp do /sys
i /proc
na 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. dtb
Został 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”?
źródło
Odpowiedzi:
/proc/device-tree
lub/sys/firmware/devicetree/base
Myślę, że oba są pseudonimami,
/sys/firmware/devicetree/base
które prawdopodobnie są lepszym wyborem po oswojeniu/proc
.Następnie możesz uzyskać dostęp do właściwości dts z plików:
Format wyjściowy liczb całkowitych jest binarny, więc
hexdump
jest potrzebny.dtc -I fs
Uzyskaj pełne drzewo urządzeń z systemu plików:
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 BuildrootBuildroot ma
BR2_PACKAGE_DTC=y
konfigurację do umieszczeniadtc
w 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: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.
źródło
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.
źródło
dtb
mogą być dostępne za pośrednictwem przez debugfs jeszcze, że opierają się naCONFIG_DEBUG_FS
w.config
i nawet jeśli zestaw jeszcze na zwykłym kaprysem, że faktycznie stosowany jestdtb
na 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?