Co to jest plik dtb u-Boot i jak go używać (BeagleBoard xM)?

13

Próbuję zbudować niestandardowy system Linux dla BeagleBoard xM (Rev. C). Robię dużo C / C ++, ale jestem początkującym w budowaniu i instalowaniu Linuksa od zera.

Użyłem urządzenia do budowania projektu Yocto ( https://www.yoctoproject.org/ ), które wydawało się obiecujące - tworzyło pliki dla modułu ładującego rozruchu u-Boot, jądra systemu Linux i systemu plików root.

Ta strona zawiera instrukcje dotyczące konfigurowania karty micro SD z plikami generowanymi przez Yocto. Pliki obrazów zawierają jednak plik „.dtb”, który nie jest wymieniony w instrukcjach konfiguracji.

Czy ten plik ma coś wspólnego ze sprzętem płyty? Różne strony wspominają o ładowaniu plików dtd (może w pliku uEnv.txt?), Ale nie znalazłem żadnych szczegółowych informacji.

Użyłem powyższych instrukcji, aby skonfigurować partycję rozruchową za pomocą MLO i u-boot.img, i trochę pomieszałem z uEnv.txt. Założyłem też drugą partycję z głównym systemem plików.

Udało mi się uruchomić i zalogować (przez konsolę portu szeregowego), ale wyglądało na to, że większość sprzętu na płycie - np. Wideo i wszystkie urządzenia USB, w tym Ethernet - nie działały. Może to być spowodowane tym, że nie używałem pliku .dtb?

Czy ktoś może wyjaśnić dtb i jak go używać na tablicy Beagle? Dzięki!

Jeremy
źródło
Okazuje się, że źle odczytałem nazwę pliku - pierwotnie myślałem, że to plik „.dtd”, ale tak naprawdę to „.dtb” - dlatego nie mogłem znaleźć informacji na jego temat. Pytanie zostało zaktualizowane.
Jeremy
Minimalny przykład z urządzeniem wirtualnym QEMU, aby lepiej zrozumieć koncepcję: stackoverflow.com/questions/17488320/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

13

Odpowiadając na moje pytanie, po tym, jak wymyśliłem, czego szukać. Plik „dtb” zawiera obiekt Blob drzewa urządzeń (lub plik binarny) (ładny opis tutaj ). Jest to nowy (er) sposób przekazywania informacji o sprzęcie na płycie do jądra Linux.

Można go załadować do pamięci i przekazać do jądra przez u-Boot.

Oto polecenia u-Boot, których użyłem:

setenv bootargs 'console=tty0 console=ttyO2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw'
fatload mmc 0:1 0x80300000 zImage
fatload mmc 0:1 0x815f0000 beagle-xm.dtb
bootz 0x80300000 - 0x815f0000

zImage jest jądrem, a beagle-xm.dtb jest blobem drzewa urządzeń. Zautomatyzowałem proces rozruchu, ustawiając zmienną „uenvcmd = ...” w pliku uEnv.txt (z powyższymi), ale jest to trochę brzydkie i są prawdopodobnie lepsze sposoby.

Zauważ, że to się uruchamia i mówi, że załadowało drzewo urządzeń OK. Jednak nadal nie mam urządzeń USB ani wideo (o ile wiem). Podejrzewam jednak, że może to być inny problem.

Jeremy
źródło
3
Jest to nowy (er) sposób przekazywania informacji o sprzęcie na płycie do jądra Linux. Nie było wcześniejszego sposobu przekazania informacji o sprzęcie do jądra. Zamiast tego jądro musiałoby statycznie zawierać wszystkie informacje, a więc miałby plik C specyficzny dla płyty, aby wyświetlić wszystkie te mapowania. To był koszmar konserwacji z punktu widzenia jądra.
BatchyX
Dzięki! Zrozumiałem, jak załadować plik dtb, a Linux uruchamia się teraz i wyświetla różne komunikaty o ładowaniu sterowników, ale nie widzę żadnych urządzeń USB (w tym modułu ethernetowego). Zobacz nowe pytanie: link . Może jest coś, co muszę ręcznie skonfigurować w systemie Linux?
Jeremy
Ale jakiego adresu użyć do pliku dtb? Na przykład, jeśli mój zImage ma adres 0x43000000 (zamiast przykładu powyżej 0x80300000), to gdzie powinien iść dtb?
André van Schoubroeck,
2

Używam Ubuntu 14.04 na beaglebone black, więc moja konfiguracja może być nieco inna, ale oto jak załadowałem niestandardowy dtb:

W pliku uEnv.txt dodaj wiersz z: dtb=name-of-desired.dtb

Wyszukiwane lokalizacje powinny być takie, jak określono tutaj . Dla mnie to właśnie /boot/dtbs/linux-kernel/tam jądro linuksa to nazwa załadowanej wersji.

Damian Manda
źródło
0

Zauważ, że są 2 dtb. U-boot dtb i jądro dtb. Są to 2 różne rzeczy. Płyta U-boot dts / dtb nie zawsze jest używana, nie jest obowiązkowa, btw w u-bootie można użyć dtb „u-boot” osadzającego go w u-boot lub łączącego go z u-boot.

Angelo Dureghello
źródło