[Buildroot] Małe wprowadzenie, czyli co z czym się je

Linux jako system PC i Embedded
Regulamin forum
Aby łatwiej poruszać się w zagadnieniach to prosimy aby w temacie, na samym początku, w nawiasach prostokątnych umieszczać hasło wiodące dla opisywanego problemu np. [Debian], [System embedded], [Linux Mint] itp.
Awatar użytkownika
inż.wielki
User
User
Posty: 307
Rejestracja: niedziela 20 gru 2015, 23:11

[Buildroot] Małe wprowadzenie, czyli co z czym się je

Postautor: inż.wielki » poniedziałek 08 paź 2018, 09:38

Jako że na forum ostatnio zebrało się parę pytań odnośnie buildroot'a postanowiłem zebrać parę informacji, które wcześniej wrzuciłem na czat. Może komuś one pomogą. Zaznaczam że są to informacje w formie krótkiej, takiej jak wrzucane na czat, oraz że postaram się je jakoś logicznie poukładać. Jednak dalej są to moje przemyślenia i informacje, które uznam za ważne do przekazania na początek.

Sam buildroot jest zbiorem skryptów, które mają zautomatyzować tworzenie obrazu systemu, ułatwić jego modyfikowanie oraz dodawanie nowych funkcjonalności. Efektem pracy buildroot'a są gotowe obrazy z systemem. Na taki obraz składają się 4 podstawowe rzeczy. Kernel, rootfs, pakiety oraz DTS.

Najpierw o strukturze katalogów buildroot'a. Wymienię tylko te najważniejsze katalogi.

board - folder, w którym każdy podfolder przechowuje pliki, potrzebne do zbudowania dystrybucji na dany hardłer. Zazwyczaj w takim folderze znajdują się pliki konfiguracyjne do kernela. Patche, lub też pliki, które nadpisują domyślne pliki w systemie plików (a masło jest maślane)

configs - Znajdują się tam pliki przechowujące domyślną konfigurację dla jakiegoś rozwiązania sprzętowego. Pierwsza część nazwy określa typ,model lub nazwę producenta procka, płyty lub jakiegoś zestawu, druga to "_defconfig". Jak wspomniałem wyżej, przechowuje się tam domyślne ustawienia dla całego buildroot'a, dla danego rozwiązania. Dlatego taką konfigurację należy TYLKO raz załadować, na samym początku pracy z danym sprzętem, lub też w sytuacji gdzie chcemy powrócić do domyślnych ustawień.
Komenda

Kod: Zaznacz cały

make defconfig xxx_defconfig

Powoduje zapisanie domyślnej konfiguracji z pliku xxx_defconfig do pliku .config w głównym katalogu.
Ps: każda zmiana w konfiguracji buildroota (make menuconfig) zmienia ustawienia właśnie w tym pliku .config.

package - folder w którym znajdują się informację dotyczące pakietów. Sa tam dokładne adresy, wersje, informacje wykorzystawne przez menuconfig itd itp.

output/build - folder w którym znajduja się pakiety zbudowane. W tym miejscu można wprowadzać zmiany w pakietach i kernelu, takie jak poprawki kodu itd.

output/images - folder w którym znajdują się wynikowe pliki typu zImage uImage itd

Każdy z pakietów jest konfigurowalny w mniejszym lub wiekszym stopniu poprzez komendę

Kod: Zaznacz cały

make menuconfig

w ten sposób dodaje się je do systemu plików

Ważnym elementem pakietów są tak zwane "znaczki". Są to pliki, które określają w jakim stanie znajduje się dany pakiet (get, extract, build, install) - nazwy mogą się różnić, piszę z pamięci - w katalogu output/build/nazwa_pakietu/ znajdują się powyższe pliki. Po uruchomieniu polecenia make, w pliku mejkfajl lub innym skrypcie znajduje się reguła, która przeczesuje każdy pakiet pod względem tych plików. Jeżeli więc usuniemy któryś, to on rozpocznie ponownie proces, którego efektem jest usunięty plik. Np jak zostanie usunięty build, dany pakiet zostanie przebudowany itd itp.

Mimo iż wcześniej rozdzieliłem kernel od pakietów, to kernel jest również pakietem. Dlatego inne pakiety takie jak dodatkowe liby, czy np aplikacje konfiguruje się poprzez samo menuconfig a nie linux-menuconfig. Ponieważ

Kod: Zaznacz cały

make linux-menuconfig


powoduje uruchomienie konfiguratora kernela, który jak już wspomniałem jest traktowany jako pakiet, ale trochę inny. W tym oknie można zedytować takie rzeczy jak moduły samego kernela, jego wersję lub też obsługę DTS'a (do czego przejdę później

Czyli sterowniki uruchamiane są w konfiguratorze jądra. Tam też jest pewien myk, ponieważ drajvery można zbudować jako: skompilowane i automatycznie uruchamiane w jądrze [*] lub też jako osobne moduły [M] które należy ręcznie uruchomić ( komenda insmod lub też modprobe ). Obrana przeze mnie technika pracy z modułami jest taka że początkowo każdy nowy sterownik jest budowany jako osobny moduł tak aby skontrolować jego uruchamianie, chociazby poprzez komendę dmesg. W momencie jak dany sterownik zachowuje się poprawnie po prostu zmieniam w menu konfiguracyjnym znaczek przy jego nazwie z [M] na [*] co oznacza że przy następnym budowaniu będzie on automatycznie wbudowany i uruchomiony przez kernel.

DTS (device tree source) jest opisem konfiguracji sprzętu podłączonego do procka a przez to do samego linuxa. Zazwyczaj dts znajduje się w katalogu board/odpowiedni_podkatalog i jest on kopiowany do katalogu output/build/linux-***/arch/arm/boot/dts. Tam też jest tworzony plik DTB (device tree blob), który jest skompilowanym plikiem DTS. On jest kopiowany wtedy do ostatecznego pliku obrazu (zImage, uImage).

Myślę że na początek to powinno wystarczyć. W miarę możliwości i wiedzy odpowiem na pytania. Informacje mogą być trochę zamieszane, pomieszane i wymieszane, ponieważ pisałem to z doskoku pomiędzy innymi czynnościami :)

Pozdrawiam

Awatar użytkownika
GrumpyRez
User
User
Posty: 224
Rejestracja: poniedziałek 04 cze 2018, 09:19

Re: [Buildroot] Małe wprowadzenie, czyli co z czym się je

Postautor: GrumpyRez » poniedziałek 08 paź 2018, 12:50

Zgodnie z tym Poradnikiem

Najpierw instalujemy potrzebne narzędzia, następnie ustawiamy zgodnie z w/w uwagami konfigi

cd somlabs-buildroot
make O=build-visionsom-6ull DEFCONFIG_NAME
make O=build-visionsom-6ull all

I teraz pytanie.... jeżeli pierwszy raz ustawiamy DEFCONFIG_NAME, i to nam zapisuje do pliku
somelabs-buildroot/build-visionsom-6ull/.config konfigurację pobraną z DEFCONFIG_NAME, to ja zmusić make menuconfig, by za każdym włączeniem właśnie pobierało ta konfigurację?

Bo zapisywanie jest w
Build Options-->

......(......) Location to save buildroot config

czyli jeżeli zrobię load i tu ścieżka do .config, po uruchomieniu make menu config....
następnie wyjdę zapiszę do somelabs-buildroot/build-visionsom-6ull/.config

to samo make, powinno zbudować wszystko zgodnie z tym co jest pliku somelabs-buildroot/build-visionsom-6ull/.config ?

Awatar użytkownika
inż.wielki
User
User
Posty: 307
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [Buildroot] Małe wprowadzenie, czyli co z czym się je

Postautor: inż.wielki » poniedziałek 08 paź 2018, 20:13

menuconfig z automatu powinien odczytywać i zapisywać te wartości w domyślnym pliku .config.

Ta opcja co pokazujesz dotyczy:
When running 'make savedefconfig', the defconfig file will be saved in this location.

Czyli ta opcja opisuje gdzie mają się zapisywać nowa konfiguracja, do używania jej później jako defconfig


Wróć do „GNU/Linux”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość