
Silas Mariusz
rm -rf /
Help us, GOD!
QNAP for Professionals & Developers
Cross Compiler na maszynie wirtualnej
Cross Compiler na maszynie wirtualnej
cross toolchain
Kompilator skrośny (ang.cross compiler) – kompilator zdolny do generowania kodu maszynowego dla platformy procesora innej niż ta, na której wykonuje się kompilator skrośny. Jest on niezbędny do kompilowania kodu na platformę, do której nie ma bezpośredniego dostępu lub dostęp jest znacznie utrudniony. Ma to miejsce szczególnie w przypadku programowania dla systemów wbudowanych.
cross compiler
Kompilacja skrośna – kompilacja wykonywana na innej architekturze procesora niż docelowa (np. program komputerowy dla docelowej architektury ARM kompilowany na architekturze x86).
Istnieje także rodzaj kompilacji skrośnej (skrótowo nazwany „Canadian Cross”), polegający na wykorzystaniu trzech architektur: na architekturze A kompilowany skrośnie jest kompilator dla architektury B i za jego pomocą kompilowany jest skrośnie program na docelową architekturę C.
Istnieje także rodzaj kompilacji skrośnej (skrótowo nazwany „Canadian Cross”), polegający na wykorzystaniu trzech architektur: na architekturze A kompilowany skrośnie jest kompilator dla architektury B i za jego pomocą kompilowany jest skrośnie program na docelową architekturę C.
[Wymagane]
- VMware Workstation lub Virtualization Station uruchomione na serwerze QNAP
- Znajomość systemu Linux
[How-To]
- Pobierz maszynę wirtualną: http://pool.qnapclub.pl/development/toolchains/cross/x86/ova/Build Server Ubuntu 7.10.ova
- Zaimportuj maszynę do VMware lub Virtualization Station.
- Upewnij się, że karta sieciowa w maszynie wirtualnej przełączona jest do połączenia mostkowego (Bridge).
- Uruchom maszynę.
- Zaloguj się jako:
login:qnap
password:qnapqnap
- Wykonaj:
Bash:sudo passwd root
- Następnie zaloguj się na roota używając wcześniej wprowadzone hasło:
Bash:su root
- Wyedytuj plik
/etc/network/interfaces
, aby wprowadzić ustawienia adresu IP maszyny wirtualnej.
W tym celu wykonaj polecenie:
Bash:vi /etc/network/interfaces
- Wyedytuj plik według opisanego poniżej schematu:
address
podaj statyczny adres IP maszyny wirtualnej, która będzie dostępna w Twojej siecinetmask
podaj maskę swojej siecinetwork
określ sieć lan używając adresu.0
dla Twojej sieci. W przypadku maski przykład:255.255.255.0
podajip.ip.ip.0
255.255.0.0
podajip.ip.0.0
255.0.0.0
podajip.0.0.0
- ...
gateway
zdefiniuj bramę wychodzącą "na świat"dns-nameservers
podaj adres IP serwera DNS. Jeśli Twój router pełni funkcje serwera DNS, podaj jego adres IP. Jeśli nie wiesz, to podaj DNS TPSA194.204.159.1
lub Google8.8.8.8
dns-search
określ swoją lokalną domenę. Jeśli nie wiesz, to wpiszlocal
.ulubiona_swoja_nazwa.ltd
- Aby zapisać zmiany w edytowanym pliku, naciśnij
ESC
, następnie:
, wpisz:wq
i potwierdź przyciskiemEnter
- Edytuj plik
/etc/resolv.conf
, aby określić serwery DNS. W tym celu wydaj polecenie:
Bash:vi /etc/resolv.conf
- Wprowadź adres serwera DNS:
Code:nameserver 10.100.200.1
Może to być wspominany powyżej adres routera, adres DNS TPSA oraz Google. Możesz podać kilka serwerów DNS. W tym celu wpisz:
Code:nameserver 194.204.159.1 nameserver 194.204.152.34 nameserver 8.8.8.8 nameserver 8.8.4.4
- Aby zapisać zmiany w edytowanym pliku, naciśnij
ESC
, następnie:
, wpisz:wq
i potwierdź przyciskiemEnter
- Następnie zastosuj ustawienia restartując usługę sieci i interfejsu. Jednak najprościej, to będzie wykonując polecenie restartu całej maszyny:
Bash:reboot
- Odczekaj na ponowne uruchomienie maszyny. Od teraz będziesz mógł się połączyć do wirtualnej maszyny za pośrednictwem ulubionego klienta SSH.
[Pomocne narzędzia]
Bash:
apt-get update
apt-get install mc
[Kompilowanie]
- Załaduj zmienne środowiskowe niezbędne do określenia cross compiler toola:
Bash:source /opt/cross-project/x86-glibc-2.6.env . /opt/cross-project/x86-glibc-2.6.env
- Aby rozpocząć kompilacje biblioteki lub aplikacji, zamiast standardowych:
Bash:./configure --prefix=/opt/build/qnap/x86 make make install
Wykonaj:
Bash:CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib CPPFLAGS="-DQNAPNAS -I${TARGET_PREFIX}/include -I${TARGET_PREFIX}/usr/include" LDFLAGS="-L${TARGET_PREFIX}/lib -L${TARGET_PREFIX}/usr/lib" ./configure --prefix=${TARGET_PREFIX} --host=${TARGET} make make install
[Przykład]
(Uwaga! Na przykładzie OpenSSL, którego kompilacja jest inna niż standardowo.)
Bash:
export cross=/opt/cross-project/x86/sys-root/usr/bin/
./Configure linux-elf 386 no-threads --prefix=/opt/compiled/openssl $ARGS --openssldir=/opt/compiled/openssl no-asm
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make install