Instruktaż/Tutorial Kompilowanie oprogramowania dla QNAP używając Cross Compiler Toolchain

Silas Mariusz

rm -rf /
Help us, GOD!
5 Kwiecień 2008
9 926
38
3 445
153
40
Nowy Sącz
forum.qnap.net.pl
QNAP
TS-x77
Ethernet
1 GbE
QNAP for Professionals & Developers
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śnakompilacja 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.

[Wymagane]
  • VMware Workstation lub Virtualization Station uruchomione na serwerze QNAP
  • Znajomość systemu Linux

[How-To]
  1. Pobierz maszynę wirtualną: http://pool.qnapclub.pl/development/toolchains/cross/x86/ova/Build Server Ubuntu 7.10.ova

  2. Zaimportuj maszynę do VMware lub Virtualization Station.

  3. Upewnij się, że karta sieciowa w maszynie wirtualnej przełączona jest do połączenia mostkowego (Bridge).
    upload_2016-3-10_22-59-54.png


  4. Uruchom maszynę.
    upload_2016-3-10_23-0-24.png


  5. Zaloguj się jako:
    login: qnap
    password: qnapqnap

  6. Wykonaj:
    Bash:
    sudo passwd root
    ... aby ustalić hasło roota.

  7. Następnie zaloguj się na roota używając wcześniej wprowadzone hasło:
    Bash:
    su root

  8. Wyedytuj plik /etc/network/interfaces, aby wprowadzić ustawienia adresu IP maszyny wirtualnej.

    W tym celu wykonaj polecenie:
    Bash:
    vi /etc/network/interfaces

    upload_2016-3-10_23-4-22.png


  9. Wyedytuj plik według opisanego poniżej schematu:
    upload_2016-3-10_23-7-36.png
    • address podaj statyczny adres IP maszyny wirtualnej, która będzie dostępna w Twojej sieci
    • netmask podaj maskę swojej sieci
    • network określ sieć lan używając adresu .0 dla Twojej sieci. W przypadku maski przykład:
      • 255.255.255.0 podaj ip.ip.ip.0
      • 255.255.0.0 podaj ip.ip.0.0
      • 255.0.0.0 podaj ip.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 TPSA 194.204.159.1 lub Google 8.8.8.8
    • dns-search określ swoją lokalną domenę. Jeśli nie wiesz, to wpisz local.ulubiona_swoja_nazwa.ltd
  10. Aby zapisać zmiany w edytowanym pliku, naciśnij ESC, następnie : , wpisz: wq i potwierdź przyciskiem Enter

  11. Edytuj plik /etc/resolv.conf, aby określić serwery DNS. W tym celu wydaj polecenie:
    Bash:
    vi /etc/resolv.conf

  12. Wprowadź adres serwera DNS:
    Kod:
    nameserver 10.100.200.1
    upload_2016-3-10_23-16-6.png


    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:
    Kod:
    nameserver 194.204.159.1
    nameserver 194.204.152.34
    nameserver 8.8.8.8
    nameserver 8.8.4.4

  13. Aby zapisać zmiany w edytowanym pliku, naciśnij ESC, następnie : , wpisz: wq i potwierdź przyciskiem Enter

  14. 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
    upload_2016-3-10_23-20-27.png


  15. Odczekaj na ponowne uruchomienie maszyny. Od teraz będziesz mógł się połączyć do wirtualnej maszyny za pośrednictwem ulubionego klienta SSH.
    upload_2016-3-10_23-22-40.png

[Pomocne narzędzia]
Bash:
apt-get update
apt-get install mc


[Kompilowanie]
  1. 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
    upload_2016-3-10_23-27-14.png


  2. 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

upload_2016-3-10_23-34-12.png


upload_2016-3-10_23-34-34.png


upload_2016-3-10_23-37-28.png
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. kompilacja