Hlavičkový obrázek pro články C/C++

Nastavení toolchainu pro ARM

Procesory pohánějící většinu dnes používaných pracovních stanic nebo notebooků jsou postaveny na architektuře x86 nebo x64. Pokud chceme spustit nějaký kompilovaný program na jiné architektuře, je nutné k tomu použít příslušný toolchain.

Nejdříve uvedeme pár důležitých pojmů.

  • Host – je hostitelský počítač (často x86/x64 architektury)
  • Target – je cílový počítač (v tomto případě ARM)
  • Toolchain – je soubor binárních programů (utilit) sloužících pro kompilaci zkompilovaných pro Hostitelský systém
  • Cross-kompilace – je proces kdy se využije toolchain schopný kompilace pro Target architekturu

V novějších linuxových distribucích je řada toolchainů schopných cross-kompilace obsažena již ve standartních repozitářích. Jejich instalace je tedy snadná.

Na 64-bitových systémech je navíc potřeba nainstalovat ještě 32-bitové knihovny. Pokud by se překládalo pro 64-bitový ARM procesor, pravděpodobně by nebyly potřebné.

$ sudo apt-get install gcc-arm-linux-gnueabihf libc6-dev-i386 libc6-dev-armhf-cross

S takto nainstalovaným a automaticky nastaveným toolchainem je už možné začít kompilovat binární programy pro ARM platformu.

#include <stdio.h>

int main(int argc, char *argv[])
{
        printf("Hello world\n");
        return(0);
}

Výše napsaný Hello world je možné zkompilovat jednak pomocí standartního gcc, tak pomocí cross-kompilace. Výsledný binární soubor pak půjde spustit buď na jedné nebo druhé platformě.

$ arm-linux-gnueabihf-gcc-4.8 main.c -o arm-hello
$ gcc main.c -o x64-hello

Architekturu, pro kterou je binární soubor zkompilován lze zjistit z výpisu utility file.

$ file arm-hello
arm-hello: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b171fc80849d4db74d4de57d8926801280606afb, not stripped

Z výpisu lze vyčíst, že se jedná o spustitelný soubor zkompilovaný pro ARM architekturu, dále je dynamicky slinkovaný a nestrippovaný.


Posted

in

, ,

by