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!
źródło
Odpowiedzi:
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:
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.
źródło
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.źródło
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.
źródło