SoftwareEmbedded Linux v kameře Jablocom EYE-02

Vývojové nástroje jazyka C pro procesory ARM

Projekt GNU zaštiťuje veškeré nástroje pro vývoj aplikací pro procesory ARM. Jako první je nutné zvolit si knihovnu jazyka C, kterou budu používat. Dále je nutné vytvořit nástroje sloužící pro práci s binárními soubory. Následuje vytvoření samotného kompilátoru pro procesor ARM a celý proces přípravy je ukončen kompilací knihovny jazyka C.

Jako základní knihovnu jsem zvolil knihovnu jazyka C glibc, protože je kompatibilní se všemi programy, které jsou dostupné pro Linux. Dále volím novější aplikační binární rozhraní (ABI) jádra a knihovny C, které je upraveno speciálně pro vestavná zařízení a které zrychluje práci s čísly v plovoucí řádové čárce na procesorech, na kterých není k dispozici jednotka pro výpočty v plovoucí řádové čárce. Pro vývojové účely je jednodušší používat kompletní nástroje a po vyvinutí programů použít optimalizace pro malá zařízení jako je například záměna za knihovnu uCLibc.

Před samotným započetím práce jsem se rozhodl pro použití distribuce Embedded Gentoo. V této distribuci jsou všechny balíčky distribuovány ve zdrojových souborech. Obsahuje také podporu pro křížovou kompilaci. Kompilace samotná probíhá na silnějším stroji, obvykle osobním počítači, a výsledná aplikace se do cílového zařízení zkopíruje již v binárním tvaru.

Celý proces začíná přípravou prostředí pomocí nástroje crossdev, podle zadaného řetězce vytvoří nástroje pro křížovou kompilaci.

~ # crossdev arm-softfloat-linux-gnueabi

Podle zvoleného procesoru a použité knihovny vytvořím textový řetězec, který bude nadále používán pro všechny nástroje. Textový řetězec pro nástroje pro procesor ARM s využitím knihovny glibc a s použitím nového binárního rozhraní (EABI) arm-softfloat-linux-gnueabi dále říká, že výsledné nástroje budou vytvářet aplikace pro Linux. Podobně by tento řetězec vypadal například pro použití knihovny uCLibc arm-softfloat-linux-uclibcgnueabi.

Balík nástrojů, který se stará o statické linkování a vytváření knihoven, se jmenuje binutils. Tento balík obsahuje skripty pro výsledné sestavení binárních aplikací. Dále obsahuje nástroj pro statické sestavení knihoven ar, nástroj pro statické a dynamické sestavování výsledných binárních souborů ld, dále je dostupný nástroj strip pro odstranění informací z binárního souboru, které nejsou potřeba pro správný běh, ale jsou například důležité pro ladění aplikace. Výsledné programy se jmenují arm-softfloat-linux-gnueabi-ar, arm-softfloat-linux-gnueabi-ld apod.

Dále je sestaven vlastní kompilátor pro jazyk C a následně i pro jazyk C++. Nakonec je sestavena knihovna jazyka C, v tomto případě glibc. Pro snadné sestavování vlastních aplikací a pro sestavení jádra používám skript, který pro správně napsaný Makefile vytvoří spustitelný soubor pro platformu ARM.

#!/bin/bash
SYSROOT="/usr/arm-softfloat-linux-gnueabi/"
TOOLCHAIN="arm-softfloat-linux-gnueabi-"
make ARCH="arm" CROSS_COMPILE="$TOOLCHAIN" INSTALL_MOD_PATH="$SYSROOT" $*

Ladění aplikací jsem prováděl přímo v PC tím, že jsem programy zkompiloval pro architekturu x86. Díky abstrakci hardware je pro testování aplikací pro kameru jediný zásadní rozdíl rychlost procesoru a velikost dostupné paměti.

Jako vývojové prostředí jsem používal IDE code::blocks, které poskytovalo jednoduchou možnost vývoje a ladění jak aplikací pro x86 pomocí debuggeru GDB, tak vzdálené ladění aplikace pomocí nástroje GDBserver. Mocný nástroj na hledání problému s přístupem do paměti je program Valgrind, který slouží k detekci přístupu do nealokovaných míst v paměti a k detekci neuvolňované paměti (memory leak).

Autor WWW
Titulek
Číslo stojedna  
Severovýchod Valid XHTML 1.0 Strict Valid CSS 2 Text to HTML converter and formatter Jay Bee simple CMS