Kompilacja OpenWrt

 

Tak się składa, że programiści OpenWrt dość rzadko decydują się na tworzenie wydań stabilnych. Ostatnio wydanie stabilne tej dystrybucji Backfire 10.03.1 ukazało się 11 grudnia 2011 roku. Od tego czasu zostało usuniętych wiele błędów, dodano wiele nowych funkcji oraz pakietów. Więc jest wiele powodów, dla których warto skompilować wersję rozwojową oraz przystosować ją pod swoje potrzeby.

Trzeba dodać, że potrzebny jest nam system Linux, można także skorzystać z systemu zainstalowanego na maszynie wirtualnej. System musi zawierać niezbędne pakiety programów przeznaczonych do kompilacji:  gcc, g++, binutils, patch, bzip2, flex, bison, make, gettext, unzip, libz-dev, libc headers, automake. Dla systemów debianowych (Debian/Ubuntu/LinuxMint) wykonujemy polecenie:

KOD
# sudo apt-get update
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev subversion flex
Wszystkie czynności związane z kompilacją wykonujemy na koncie normalnego użytkownika, przy próbie kompilacji z konta root zostanie wyświetlone ostrzeżenie oraz kompilator zakończy swoją pracę
W zależności od wybranych opcji potrzebne jest od 2 do 10GB wolnego miejsca na dysku.

Pobieranie źródeł

Źródła będą znajdować się w katalogu /opt/trunk. Należy upewnić się, że posiada on prawa do zapisu dla normalnego użytkownika.

$ cd /opt
$ svn co svn://svn.openwrt.org/openwrt/trunk/

Powyższe polecenie pobiera podstawowy system, aby pobrać pozostałe pakiety dostępne w repozytorium należy przejść do katalogu ze źródłami a następnie wykonać następne polecenie:

$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

Aktualizacja

Gdy za jakiś czas będziemy ponownie kompilować nowe firmware przyda się zaktualizować źródła do najnowszej wersji.

$ svn up
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

Polecenia wykonujemy w katalogu ze źródłami, czyli /opt/trunk.

Konfiguracja

$ make menuconfig

Na tym etapie wybieramy platformę docelową oraz pakiety, jakie potrzebujemy. Interfejs jest podobny do tego, który ukazuje się podczas kompilacji jądra Linux. Poniżej przedstawiam wyjaśnienie wyboru pakietów.

< > pakiet nie zostanie skompilowany
<M> skompiluje się, jako paczka, nie zostanie dołączony do obrazu systemu
<*> skompiluje się, jako paczka ipk  oraz zostanie wkompilowany w wynikowy obraz
<–> pakiet jest domyślnie wybrany, oznacza to, że jakiś pakiet jest uzależniony od tego, użytkownik nie ma wpływu na ten wybór

Jak już wszystko wybraliśmy to wychodzimy z menu klawiszem Esc oraz zapisujemy konfigurację wybierając „yes”

Kompilacja

$ make

Zostanie utworzony cross kompilator następnie kernel oraz pakiety.

Jeżeli nasz CPU ma więcej rdzeni (kompilowanie wielowątkowe)

$ make -j3

Liczba „3” to liczba wątków, zalecana liczba to liczba rdzeni+1.

Jeżeli chcemy zobaczyć informacje podczas kompilacji

$ make V=s

Obrazy wynikowe i pakiety zostaną umieszczone w podkatalogu bin/

Czyszczenie kompilacji

$ make dirclean

Czyści wszystko, co się stworzyło w czasie kompilacji firmware.

$ make target/linux/clean

Usuwa sam skompilowany kernel

$ make target/toolchain/clean

Usuwa skompilowany cross kompilator