How-To Kompilowanie oprogramowania dla QNAP używając Cross Compiler Toolchain

Silas Mariusz

Silas Mariusz

rm -rf /
Help us, GOD!
Apr 5, 2008
9,808
25
2,204
153
38
www.devspark.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


  4. Uruchom maszynę.
    Upload 2016 3 10 23 0 24


  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


  9. Wyedytuj plik według opisanego poniżej schematu:
    Upload 2016 3 10 23 7 36
    • 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:
    Code:
    nameserver 10.100.200.1
    Upload 2016 3 10 23 16 6


    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

  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


  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

[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


  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


Upload 2016 3 10 23 34 34


Upload 2016 3 10 23 37 28
 
  • Like
Reactions: Artjablo and pigers
M

mafiasia

Nowy użytkownik
Noobie
Jan 27, 2021
1
0
1
53
QNAP
TS-x70 Pro
Ethernet
1 GbE
You must log in or register to view this reply.