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

Dyskusja w 'Oh'Linux? Software hacking' rozpoczęta przez użytkownika Silas Mariusz, 10 Marzec 2016.

Ładowanie...
  1. Silas Mariusz
    Offline

    Silas Mariusz SysOp Administrator

    Dołączył:
    5 Kwiecień 2008
    Wiadomości:
    6 351
    Miejscowość:
    Nowy Sącz
    Local Time:
    18:33
    Oceny:
    +1 417 / 30 / -6
    Followers:
    23
    QNAP:
    TVS-x71
    Ethernet:
    1 GbE
    TVS-x71 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:
      Kod (Bash):
      1. sudo passwd root
      ... aby ustalić hasło roota.

    7. Następnie zaloguj się na roota używając wcześniej wprowadzone hasło:
      Kod (Bash):
      1. su root
    8. Wyedytuj plik /etc/network/interfaces, aby wprowadzić ustawienia adresu IP maszyny wirtualnej.

      W tym celu wykonaj polecenie:
      Kod (Bash):
      1. 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:
      Kod (Bash):
      1. vi /etc/resolv.conf
    12. Wprowadź adres serwera DNS:
      Kod (Text):
      1. 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:
      Kod (Text):
      1. nameserver 194.204.159.1
      2. nameserver 194.204.152.34
      3. nameserver 8.8.8.8
      4. 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:
      Kod (Bash):
      1. 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]
    Kod (Bash):
    1. apt-get update
    2. apt-get install mc

    [Kompilowanie]
    1. Załaduj zmienne środowiskowe niezbędne do określenia cross compiler toola:
      Kod (Bash):
      1. source /opt/cross-project/x86-glibc-2.6.env
      2. . /opt/cross-project/x86-glibc-2.6.env
      upload_2016-3-10_23-27-14.

    2. Aby rozpocząć kompilacje biblioteki lub aplikacji, zamiast standardowych:
      Kod (Bash):
      1. ./configure --prefix=/opt/build/qnap/x86
      2. make
      3. make install
      Wykonaj:
      Kod (Bash):
      1. 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}
      2. make
      3. make install

    [Przykład]
    (Uwaga! Na przykładzie OpenSSL, którego kompilacja jest inna niż standardowo.)
    Kod (Bash):
    1. export cross=/opt/cross-project/x86/sys-root/usr/bin/
    2.  
    3. ./Configure linux-elf 386 no-threads --prefix=/opt/compiled/openssl $ARGS --openssldir=/opt/compiled/openssl no-asm
    4.  
    5. make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
    6. make install
    upload_2016-3-10_23-34-12.

    upload_2016-3-10_23-34-34.

    upload_2016-3-10_23-37-28.
     
    • Lubię to! Lubię to! x 2
  2. Silas Mariusz
    Offline

    Silas Mariusz SysOp Administrator

    Dołączył:
    5 Kwiecień 2008
    Wiadomości:
    6 351
    Miejscowość:
    Nowy Sącz
    Local Time:
    18:33
    Oceny:
    +1 417 / 30 / -6
    Followers:
    23
    QNAP:
    TVS-x71
    Ethernet:
    1 GbE
    TVS-x71 1 GbE
    Powyższa instrukcja obecnie jest nieaktualna od oprogramowania QNAP QTS 4.3, który bazuje na Ubuntu 14.04 x64.
    A więc aby skompilować cokolwiek na QNAP z oprogramowaniem 4.3 wystarczy przygotować środowisko na wirtualnej maszynie z oprogramowaniem Ubuntu 14.04 x64 a na nim kompilować oprogramowanie z prefixem naszej lokalizacji na QNAP.

    Np. kompilując mc
    Kod (Bash):
    1. ./configure --prefix=/opt/myApp
    2. make
    3. make install
    Następnie skompilowaną aplikacje mc w tą lokalizacje wystarczy przekopiować do systemu QNAP do dokładnie tej samej ścieżki podanej w prefixie.
    Jeśli pojawi się problem podczas uruchomienia z brakiem bibliotek, które są wymagane do jej uruchomienia pozostaje oczywiście kłopot w kwestii skompilowania mc do wersji statycznej. Ale!!! W większości przypadkó wymagane biblioteki zawsze możemy spróbować przekopiować z Ubuntu do naszego QNAP'a w lokalizację podanego wcześniej prefixu/lib: /opt/myApp/lib.

    Czy teraz mając lib'y w w prefixie uruchomimy mc?
    Nie
    Przed uruchomieniem należy wyeksortować dodatkową zmienną środowiskową określającą położenie dodatkowych bibliotek w naszym systemie LD_LIBRARY_PATH, a tzn.:
    Kod (Bash):
    1. export LD_LIBRARY_PATH=/opt/myApp/lib
    a następnie uruchomić ./mc będąc w katalogu /opt/myApp

    Jeśli natomiast pozostają jeszcze jakiekolwiek brakujące biblioteki to wystarczy je znaleźć sprawdzając do czego mc się odnosi wpisując komende w QNAP:
    Kod (Bash):
    1. ldd -r /opt/myApp/bin/mc
     
    • Piwo Piwo x 1

Poleć tę stronę

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Odrzuć powiadomienie.