2005 02 Scratchbox–narzędzie do kompilacji skrośnej [Programowanie]


narzędzia deweloperskie
Scratchbox
 narzędzie
do kompilacji skrośnej
Veli Mankinen
dyby przyjrzeć się historii i z tego powodu nie może być uznawa-
komputeryzacji i oprogra- ny za właściwy. Na Rysunku 1 znajduje
mowania, można zauwa- się wykres pokazujący różnice w czasach
Gżyć, że kompilacja skro- kompilacji pomiędzy kompilacją natyw-
śna jest wynalazkiem względnie nowym. na a skrośną. Docelowy komputer z pro-
We wczesnych latach rozwoju informaty- cesorem ARM posiadał następującą kon-
ki nie była ona w ogóle potrzebna, ponie- figurację: procesor Intel SA110 233 MHz,
waż programy były pisane na konkretny dysk twardy 40 GB, 256 MB pamięci
sprzęt i w ściśle określonym celu. Z tego RAM oraz Debian Sarge z jądrem Linuksa
powodu powtórne użycie tego samego 2.4.25. Wykorzystana platforma do kom-
kodu nie było w obszarze zainteresowań pilacji skrośnej miała następujące para-
programistów. metry: procesor Intel Xeon CPU 2.80
Ponieważ dzisiejsze procesory mają GHz, dysk twardy 80 GB, 2 GB pamięci
bardzo różną moc obliczeniową, to RAM oraz Debian Sarge z jądrem Linuksa
w wielu przypadkach kompilacja aplika- 2.6.8-1-686 i Scratchboksem 0.9.8.2.
cji na innym, bardziej wydajnym kompu-
terze, zajmuje znacznie mniej czasu niż Narzędzia i urządzenia
kompilacja na sprzęcie, który jest bezpo- Typowe użycie kompilacji skrośnej ma
średnim odbiorcą danego oprogramowa- miejsce wtedy, gdy ktoś chce skompilo-
nia. W ten sposób narodziła się idea kom- wać program używany na palmtopie, czy
pilacji skrośnej (ang. cross-compiling). innym niewielkim komputerku o relatyw-
nie małej mocy obliczeniowej procesora.
Co to jest kompilacja Ten artykuł będzie koncentrował się na
skrośna? tworzeniu oprogramowania pod IPAQ-a,
Podstawowa idea kompilacji skrośnej a kompilacja będzie realizowana na szyb-
polega na użyciu pewnego procesora kim komputerze klasy X86. Największą
(HOST) w celu skompilowania progra- korzyść z niego będą miały osoby posia-
mu przeznaczonego na procesory mające dające IPAQ-a albo inny komputer z pro-
inną architekturę (TARGET). Oznacza to, cesorem ARM, na którym została zainsta-
że komputer kompilujący program nie lowana jakaś dystrybucja Linuksa.
może natywnie uruchamiać skompilowa- Osoby posiadające IPAQ-a i zaintere-
nego przez siebie oprogramowania. Jest sowane uruchomieniem na nim Linuksa,
to pierwsze wyzwanie stojące przez kom- względnie kompilowaniem na ten kom-
pilacją skrośną, gdyż wiele środowisk puter programów, powinny zapoznać się
programistycznych wymaga uruchomie- z dystrybucją o nazwie Familiar Linux,
nia dodatkowych narzędzi, specyficz- dostępnej pod adresem www.hand-
Na płycie CD/DVD
Na płycie CD/DVD znajdują się nych dla docelowej architektury, już pod- shelds.org. Na wspomnianej stronie
narzędzia omawiane w artykule.
czas kompilacji programu. zostały też umieszczone bardzo użytecz-
Aby uniknąć wspomnianych trudno- ne podręczniki instalacyjne.
O autorze
ści, niektórzy ludzie wolą kompilować W niniejszym artykule zostanie użyte
Autor jest współtwórcą pakietu
programy na docelowej platformie. Jak- narzędzie do kompilacji skrośnej pocho-
Scratchbox. Kontakt z autorem:
veli.mankinen@movial.fi kolwiek na to patrzeć, w wielu przypad- dzące z projektu o nazwie Scratchbox. Jest
kach jest to bardzo bardzo wolny proces to środowisko programistyczne do two-
28
luty 2005
narzędzia deweloperskie
scratchbox
#include
int main(void)
{
printf("Hello World!\n");
return 0;
}
Najpierw skompilujmy "Hello World"
natywnie na X86, aby sprawdzić, jak
działa kompilacja i uzyskać pewne infor-
macje o tworzonych binariach. Załóżmy,
że "Hello World" został zapisany w pliku
o nazwie hello.c. Teraz, w tym samym
katalogu, w którym znajduje się hello.c,
uruchomimy komendę:
# gcc -Wall -o hello hello.c
W rezultacie nie powinniśmy otrzy-
mać żadnych komunikatów, ale powi-
nien powstać plik binarny hello, który
możemy uruchomić poprzez wpisanie
komendy ./hello. Po wykonaniu tych
działań komputer powinien wyświetlić
Rysunek 1. Porównanie czasów kompilacji przy kompilacji natywnej i skrośnej
napis Hello World!.
Teraz uruchommy komendę file,
rzenia oprogramowania linuksowego pod Wykorzystywana przez nas konfiguracja która da nam dostęp do kilku informa-
wszystkie dystrybucje Linuksa. Podstawo- wymaga około 428 MB wolnego miejsca, cji o pliku binarnym: file hello. Powin-
wą ideą Scratchboksa jest zaoferowanie a i tak dodatkowo jest potrzebne trochę ny one wyglądać podobnie do:
deweloperom środowiska, które działa i więcej na własne działania. Jeżeli katalog /
wygląda jak środowisko docelowe, jesz- nie posiada wystarczającej ilości przestrze- hello: ELF 32-bit LSB executable,
cze zanim środowisko to będzie fizycz- ni dyskowej, to Scratchbox może być zain- Intel 80386, version 1 (SYSV),
nie dostępne. stalowany w innym miejscu, ale wtedy for GNU/Linux 2.2.0, dynamically linked
Środowisko Scratchbox zapewnia me- niezbędne będzie utworzenie odwołania z (uses shared libs), not stripped
chanizm logowania identyczny z tym, który /scratchbox do miejsca docelowego. Reali-
jest stosowany na urządzeniu docelowym. zujemy to za pomocą komendy: Oczywiście, żadna z wyświetlonych
Narzędzia Scratchboksa mogą być używane informacji nie odnosi się aktualnie ani do
zarówno w tym środowisku, jak i poza # ln -s /home/scratchbox /scratchbox Scratchboksa, ani do kompilacji skrośnej.
nim. Użycie narzędzi poza środowiskiem Aby to zmienić, powinniśmy zastosować
Scratchbox jest takie samo, jak dowolnych Po rozpakowaniu pakietów musimy jesz- kompilator wchodzący w skład pakietu
innych narzędzi, które posiada nasz kom- cze skonfigurować Scratchboksa poprzez Scratchbox. Uruchommy komendę:
puter. W takim przypadku jest to zwykłe, wprowadzenie komendy:
S
może nawet staromodne, podejście do # /scratchbox/compilers/arm-linux
S
kompilacji skrośnej. # /scratchbox/run_me_first.sh -gcc-3.3_3.3.4-glibc-2.3.2.ds1/
Aktualna stabilna wersja Scratchbok- bin/arm-linux-gcc -Wall -o arm-hello hello.c
sa nosi numer 0.9.8.2. Wszystkie pakie- Będziemy musieli udzielić odpowiedzi na
ty można pobrać ze strony www.scratch- kilka pytań, ale wystarczy, że zaakceptu-
box.org. Następujące z nich są niezbędne: jemy wartości domyślne.
scratchbox-core, scratchbox-libs, scratch-
box-devicetools oraz scratchbox-toolcha- Przechodzimy
in-arm-glibc. Każdy z nich jest udostęp- do konkretów
niany w formie pakietów tar.gz, deb oraz Na początek przedstawimy tradycyj-
rpm. Możliwy jest wybór dowolnego typu ne podejście do kompilacji skrośnej
pakietu. i użyjemy narzędzi Scratchbox w syste-
W przypadku plików tar.gz powinni- mie głównym, podobnie jak większości
śmy rozpakować je do katalogu / (każdy innych narzędzi. Będziemy potrzebowa-
Rysunek 2. Praca ze Scratchboksem
z pakietów): li niewielkiego fragmentu kodu programu
odbywa się przede wszystkim w trybie
do kompilacji. To zadanie dobrze spełni
tekstowym
# tar zxf -C /  Hello World :
29
www.lpmagazine.org
narzędzia deweloperskie
licznych bibliotek i ma skomplikowane do grupy sbox można sprawdzić za
systemy budowania aplikacji. Oznacza pomocą polecenia:
to, że w takiej sytuacji będziemy musie-
li skompilować także biblioteki, a to nie # groups
może odbywać się jednocześnie z kom-
pilowaniem samego programu. Z tego Po zalogowaniu się do Scratchboxa
powodu stosowanie kompilacji skro- powinniśmy skonfigurować środowisko
śnej wymaga pieczołowitych ustawień dla potrzeb kompilacji skrośnej:
całego środowiska budującego apli-
S
kację. Te ustawienia są często trudne # sbox-config -ct MYTARGET -cn
S
i wymagają dużych nakładów czaso- arm-linux-gcc-3.3_3.3.4
wych. Środowisko Scratchbox wykonu- -glibc-2.3.2.ds1 -cm qemu-arm
je większość pracy za nas.
Pózniej powinniśmy je aktywować. Reali-
Kompilacja skrośna zujemy to poprzez wpisanie komendy:
w Scratchboksie
Scratchbox jest chrootowanym środo- sbox-config  select-target=MYTARGET
wiskiem kompilacji skrośnej. Oznacza
to również, że dowolna osoba może Teraz prompt powinien ulec zmianie na:
Rysunek 3. Również dla Zaurusa
zalogować się do Scratchboksa, tak jak [sbox-MYTARGET: ~] >.
można tworzyć programy przy pomocy
loguje się na prawdziwym urządzeniu. W środowisku Scratchbox, w nowym
Scratchboksa
W każdym przypadku użytkownicy drzewie /, znajduje się standardowy
muszą zostać dodani do Scratchboksa zestaw katalogów (/bin, /sbin, /usr, /var
Jej użycie nie powinno spowodować przed ich zalogowaniem się (musi to itd.), ale są one zupełnie puste. Dzięki
wygenerowania żadnych komunika- być użytkownik istniejący w systemie, temu możliwe jest zainstalowanie dowol-
tów, ale teraz powinniśmy otrzymać ale nie może to być root). Realizujemy nego innego oprogramowania w miej-
plik binarny o nazwie arm-hello. Tego to za pomocą komendy: scu docelowym, bez martwienia się
pliku nie da się bezpośrednio urucho- o możliwość nadpisania programów
S
mić, ponieważ jest on przeznaczony # /scratchbox/sbin/sbox_adduser nazwa_ komputera głównego. Ponieważ kata-
dla architektury ARM, a znajduje się na użytkownika logi są puste, więc nie mamy rów-
komputerze X86. Jedyne co możemy nież biblioteki C, choć jest ona zwykle
zrobić, to zastosować znowu komendę W celu zalogowania się do systemu wymagana przez komponenty opro-
file, aby przekonać się, że jest to rze- Scratchbox musimy użyć komendy: gramowania. Z tego powodu powin-
czywiście plik binarny ARM. Wpisz- niśmy zainstalować lub skompilować
my więc: file arm-hello, co powinno /scratchbox/login wszystko, czego będziemy potrzebowa-
spowodować wyświetlenie komunika- li w środowisku docelowym. Na szczę-
tu w stylu: Po uruchomieniu tej komendy, powin- ście, tzw. toolchain Scratchboksa zawiera
no pojawić się kilku komunikatów bibliotekę C i możemy ją zwyczajnie sko-
arm-hello: ELF 32-bit LSB executable, powitalnych, a tzw. prompt systemo- piować poprzez wpisanie komendy:
ARM, version 1 (ARM), for GNU/Linux wy ulegnie zmianie np. na: [sbox-HOST:
2.0.0, dynamically linked ~] >. Informuje on, że znajdujemy się # sbox-config --copy-clibrary
(uses shared libs), not stripped pod zarządem Scratchboksa oraz że
używane jest docelowe środowisko o Teraz posiadamy już gotowe środowisko
W ten sposób udało nam się skompilo- nazwie HOST. W Scratchboksie można do kompilowania oprogramowania pod
wać skrośnie nasz pierwszy program! użyć wielu środowisk docelowych, co ARM. Scratchbox jest dostarczany z emu-
Jeżeli dysponujemy IPAQ-iem lub ekwi- oznacza, że możemy kompilować pro- latorem QEMU, który będzie używany
walentnym urządzeniem z uruchomio- gramy pod różne architektury i usta- w dalszych przykładach. Omawiane na-
nym Linuksem, to oczywiście możemy wienia. Warto tu zwrócić uwagę, że rzędzie deweloperskie potrzebuje urzą-
wypróbować działanie tego progra- katalog / nie jest tym samym katalo- dzenia lub emulatora, który ma moż-
mu. Wystarczy przenieść plik arm-hello giem, co na zewnątrz Scratchboksa, liwość uruchomienia programów dla
do IPAQ-a, używając komendy scp, a oraz że będziemy mieli różne katalo- docelowej architektury. Dzięki takiej
następnie normalnie uruchomić. gi domowe. Ponadto, istotne jest, że funkcjonalności możemy mieć środo-
Jeżeli kompilowane fragmenty jeśli dany użytkownik zalogował się wisko kompilacji skrośnej bez pełnej
kodu są niewielkie (podobnie jak nasz do systemu przed dodaniem go jako wiedzy, zarówno o systemie docelo-
program), to do wykonania całości użytkownika Scratchboksa, to musi się wym, jak i o tym, jak należy tę wiedzę
pracy nie potrzebujemy niczego więcej przelogować, aby uzyskać przywileje wbudować w środowisko. Narzędzia
niż kompilatora obsługującego kompi- członkowskie grupy sbox, niezbędne same wyszukają odpowiednie informa-
lację skrośną. Wiele programów Open do uruchomienia omawianego narzę- cje, podobnie jak ma to miejsce podczas
Source, które można znalezć, używa dzia deweloperskiego. Przynależność kompilacji natywnej.
30
luty 2005
narzędzia deweloperskie
scratchbox
Jeżeli ponownie wpiszemy program wiście, glib może być kompilowany Kompilacja powinna zakończyć się
"Hello World" i skompilujemy go za także poprzez skonfigurowanie środo- bez zgłaszania jakichkolwiek błędów,
pomocą komendy: wiska, ale jest to nieco bardziej skompli- a jako jej wynik powstanie plik binar-
kowane niż przykład pokazany wyżej. ny sb-arm-glib-hello. Ponieważ posia-
gcc -Wall -o sb-arm-hello hello.c Dokumentacja o kompilacji skrośnej damy emulator QEMU, więc możemy
glib jest dostępna pod adresem: http:// go teraz uruchomić, w wyniku czego
to kompilacja powinna przebiec bez developer.gnome.org/doc/API/2.0/glib/ powinien pojawić się napis  Hello
błędów, a jako wynik otrzymamy plik glib-cross-compiling.html. World!". Jeżeli teraz wydamy komen-
binarny sb-arm-hello. Po uruchomieniu Teraz, gdy w naszym środowisku dę file, to jej wynik powinien być iden-
komendy: mamy już zainstalowane biblioteki C oraz tyczny jak w poprzedniej wersji pro-
glib, możemy skompilować nowe "Hello gramu  Hello World!". Jeśli wywołamy
file sb-arm-hello World", które będzie używało funkcji jeszcze komendę ldd, która pokazu-
print z biblioteki glib. Oto plik glib-hel- je wykorzystanie bibliotek, to będzie-
otrzymamy komunikat, który pokazuje, lo.c: my mogli zobaczyć, że zainstalowana
że znowu mamy w swoim ręku rzeczy- przed chwilą biblioteka glib jest rze-
wisty plik binarny ARM: # include czywiście używana (ldd sb-arm-glib-
# include hello):
sb-arm-hello: ELF 32-bit LSB executable, int main(void)
ARM, version 1 (ARM), for GNU/Linux { libglib-2.0.so.0 => /usr/local/lib/
2.0.0, dynamically linked g_printf("Hello World!\n"); libglib-2.0.so.0 (0x00000000)
(uses shared libs), not stripped return 0; libc.so.6 => /lib/libc.so.6 (0x00000000)
S
} libgcc_s.so.1 => /lib/libgcc_s.so.1
Ponieważ jesteśmy wewnątrz środowi- (0x00000000)
ska Scratchbox, to możemy uruchomić Scratchbox jest dostarczany z narzędziem /lib/ld-linux.so.2 =>
powstały program w emulatorze poprzez pkg-config, które jest używane w celu /lib/ld-linux.so.2 (0x00000000)
wpisanie: ./sb-arm-hello. W rezultacie wygodnego wyciągnięcia wszystkich
otrzymamy wynik w postaci napisu Hello ścieżek dostępu związanych z biblioteką W tej chwili możemy już tworzyć pliki
World!. glib. Domyślnie, glib instaluje się do /usr/ wykonywalne naszych programów i biblio-
local/ i do tego samego katalogu są także tek, a następnie przenosić je na różne
Przykład bardziej instalowane pliki konfiguracyjne pkg- urządzenia oparte o procesor ARM.
skomplikowany config. W poniższym przykładzie użyje- Scratchbox zawiera jeszcze wiele
Kolejny przykład będzie wymagał biblio- my pkg-config oraz tak ustawimy zmien- innych rozszerzeń i narzędzi, które
teki glib z rodziny GTK+. Najpierw ną środowiskową PKG_CONFIG_PATH, pomagają w tworzeniu oprogramowania,
musimy ściągnąć pakiet glib i skompi- że narzędzie znajdzie odpowiednie pliki np. dla Debiana ARM.
lować go dla środowiska docelowego za glib:
pomocą następujących komend: Podsumowanie
S
# export PKG_CONFIG_PATH=/usr/local/ Istnieje wiele ciekawych urządzeń, na
S
> wget ftp://ftp.gtk.org/pub/gtk/v2.2/ lib/pkgconfig/ których można zainstalować i urucha-
glib-2.2.3.tar.bz2 miać Linuksa. Uruchomienie czy skom-
> tar -xjvf glib-2.2.3.tar.bz2 Teraz możemy uruchomić pkg-config pilowanie naszych ulubionych progra-
> cd glib-2.2.3  list-all, co umożliwi nam obejrzenie mów na te urządzenia może być rzeczy-
> ./configure bibliotek zainstalowanych w systemie. wiście trudnym zadaniem. Dzięki odpo-
> make W tej chwili powinno to wyświetlić: wiednim narzędziom oraz z pomocą róż-
> make install nych artykułów z czasopism i ze stron
gmodule-2.0 GModule - Dynamic module internetowych można spowodować, że
Jak można zauważyć, jest to znacz- loader for GLib nie będzie to już tak skomplikowane.
nie bardziej złożony przykład. Użyli- glib-2.0 GLib - C Utility Library A już na pewno jest to bardzo interesują-
śmy skryptu configure, który kompi- gobject-2.0 GObject - GLib Type, Object, ca dziedzina do doświadczeń programi-
luje i uruchamia dużo różnych pro- Parameter and Signal Library stycznych.
gramów w celu wyciągnięcia różnych gthread-2.0 GThread - Thread support
danych o środowisku. Gdybyśmy użyli for GLib
kompilacji skrośnej poza Scratchbok-
W Internecie:
sem, wtedy skrypt configure nie ukoń- W celu skompilowania nowego "Hello
 Strona domowa projektu Scratchbox:
czyłby prawidłowo działania, ponieważ World" będziemy potrzebowali następu-
http://www.scratchbox.org/
nie mógłby uruchomić programów do jącej komendy:
 Strona domowa projektu QEMU:
kompilacji. Zerknięcie do pliku /tmp/
http://fabrice.bellard.free.fr/qemu/
S
cputransp_$USER.log pozwala na uzy- # gcc -Wall `pkg-config --cflags
 Strona domowa projektu Handhelds:
S
skanie informacji o komendach, które --libs glib-2.0` -o sb-arm
http://www.handhelds.org/
były uruchamiane z emulatorem. Oczy- -glib-hello glib-hello.c
31
www.lpmagazine.org


Wyszukiwarka

Podobne podstrony:
Konstytucje UGLE 2005 02 Appendix strony 159 do 192
1 02 Korzystanie z zalet zintegrowanego ¶rodowiska programi
NF 2005 02 siła wizji
2005 02 33
2005 02 26
2005 02 All on Board Kontact with Imap Based Calendar and Address Management
NF 2005 02 tatuaż
NF 2005 02 podróżnicy
NF 2005 02 interesy nie idą dobrze
2005 01 Pyro i OpenSSL–bezpieczny komunikator internetowy [Programowanie]
2005 02 Ready for Press Templates and Pdfs in Scribus
NF 2005 02 paszcza
Sprzedaj swoj program Droga do udanych projektow programistycznych sprogr
02 Wprowadzenie do Visual Basic cwiczenia przygotowujace

więcej podobnych podstron