Toto je starší verze dokumentu!


Požadavky a pravidla pro tvorbu přenositelného kódu. Organizace projektů a operačních systémů pro splnění přenositelnosti mezi různými architekturami CPU. Konverze vnitřních a vnějších/síťových formátů dat.(A4M35OSP)

Požadavky a pravidla pro tvorbu přenositelného kódu

Při realizaci softwarových systémů často nemůžeme zanedbat cílovou hardwarovou architekturu stroje a musíme psát kód tak, aby jej bylo možné snadno upravit (ideálně pouze rekompilovat) pro běh na jiných platformách. V okamžiku kdy je nutné přímo interagovat s některou hardwarovou komponentou počítače (řídící jednotky, SCADA systémy, …), se dostáváme až na úroveň, kdy musíme řešit věci, jako uspořádání bytů v proměnné apod. K základním požadavkům na přenositelnost zdrojového kódu patří:

  • psát čistě a používat jen to, co je jazykem deklarováno,
  • pokud je to možné používat pouze standardizovaná API - POSIX, IEEE Std. 1003.1,
  • nepředpokládat pořadí byte/char ve slovech - little versus big endian,
  • nepředpokládat počet bitů v adresační jednotce (používat stdint.h - int32_t, …),
  • psát kód proti knihovnám a nikoliv přímo proti konkrétním voláním služeb operačního systému (konkrétním makrům, číslům volání, atd.).

Organizace projektů a operačních systémů pro splnění přenositelnosti mezi různými architekturami CPU

Aby bylo možné snadno přenášet projekty mezi různými operačními systémy a jejich verzemi a hardwarovými architekturami, bylo definováno několik standardů a vyvinuto několik nástrojů, které mají tuto přenositelnost usnadnit:

  • POSIX - Portable Operating System Interface - standardy IEEE 1003 a ISO/IEC 9945 - definuje, co by měl poskytovat operační systém, jaké příkazy, jaké vlastnosti - na základě tohoto standardu je potom poměrně snadné převádět projekty mezi různými distribucemi Linuxu, UNIXY, atd. (uvádí se, že to je mnohdy jednodušší než převod projektů mezi různými verzemi Windows)
  • Filesystem hierarchy standard - dokument popisující, co má být ve kterém adresáři v linuxové distribuci, mezi typické adresáře patří
    • /usr/bin - binární programy (platformně závislé)
    • /usr/local - prefix do kterého je instalován software lokální pro tento stroj
    • /usr/share - sdílené (na hw platformě nezávislé) zdroje - často může být tento systém sdílen mezi různými stroji (např. pomocí NFS)
    • /usr/lib - knihovny (platformně závislé)
    • FHS popisuje, co by měl/neměl který adresář správně obsahovat

Kompilace GNU balíků

Nejrozšířenějším nástrojem pro kompilaci GNU balíků je systém Autotools. Tento systém se skládá z více nástrojů. Mezi hlavní a nejdůležitější patří:

  • m4, aclocal, autoheader
  • autoheader
  • autoconf
  • automake

Tyto nástroje zpracovávají vstupní soubory, které obsahují informace o projektu, závislostech, požadavcích na cílovou platformu atd. Jedná se zejména o soubory:

  • Makefile.am
  • configure.ac
  • config.h.in

Proces sestavování (build) softwarového balíku se dělí na část, která probíhá u vývojáře (vyžaduje ke svému běhu větší množinu nástrojů) a část, kterou spouští klient.

Při přípravě distribuovatelného balíku (zpravidla nějaký *.tar.gz nebo *.zip archiv) je nutné spustit následující příkazy, které zpracovávají zmíněné soubory:

  • aclocal: configure.ac → aclocal.m4
  • autoheader: configure.ac → config.h.in
  • autoconf: configure.ac → configure
  • automake: Makefile.am → Makefile.in

Celý build systém je postaven na makro procesoru m4 (zpracovává vstupní soubory a přepisuje makra na další řetězce, v tomto případě přepisuje příkazy/řetězce na výstupní shell skript, který potom běží na cílové instalační platformě). První příkaz (aclocal) zajistí přítomnost potřebných definic pro makroprocesor m4 v souboru aclocal.m4.

Autoheader umožňuje vygenerování platformně závislého hlavičkového souboru, který potom může být includován do projektu a mohou z něj být získávány nejrůznější informace, které jsou známé až při instalaci na cílovém systému (např. cesty k souborům, atd).

Programy autoconf a automake jsou nejdůležitějí - autoconf generuje soubor configure, který používá klient k vygenerování souboru Makefile, který je následně možné použít pro zkompilování projektu. Nástroj automake připravuje pro soubor Makefile šablony, které jsou následně zpracovávány skriptem configure pro vytvoření finálního Makefile souboru.

Balík, který je připraven pomocí výše zmíněných nástrojů již ke své kompilaci nástroje autotool a automake nepotřebuje.

Konfigurace před kompilací na cílovém nebo build systému potom vypadá následovně:

<srcdir>./configure –host=arm­linux­gnueabi ­­enable­feature with­package­x=/opt/x

Při této fázi jsou vygenerovány následující soubory:

  • z Makefile.in je vygenerován Makefile
  • z config.h.in je vygenerován config.h

Pomocí skriptu configure je možné ovlivňit i CFLAGS=x, LDFLAGS=x v prostředí.

Finální kompilace potom probíhá následovně:

make all

Instalace zkompilovaného projektu do cílového adresáře:

make DESTDIR=/packaging/root install

Portace kódu a křížový překlad

Nativní a křížové vývojové řetězce

Native build

Native build.

Cross build

Cross build.

Cross-native build

Cross native build.

Canadian build

Canadian build.

Konverze vnitřních a vnějších/síťových formátů dat

  • little endian/big endian
  • textové formáty: XML, HTML, SOAP, JSON
  • external data representation (XDR)
  • RPC, CORBA
  • padding - zarovnávání packetů

Zdroje

statnice/oi_si_7.1307264092.txt.gz · Poslední úprava: 2025/01/03 18:19 (upraveno mimo DokuWiki)
Nahoru
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0