Galileo?

IntelのGalileoのArduinoIDE付属のクロスコンパイラを抜き出して使う - Galileo

概要

Intelが公式に用意しているArduinoIDEから,Galileo向けのクロスコンパイラを抜き出して,自分の書いたソースコードをコンパイルしてしまおう.

Arduino環境からクロスコンパイラを抜き出す

IntelのGalileoのSDカード用Linuxイメージを作る - Galileoに示す方法でLinuxイメージをビルドすると,一緒にクロス環境の開発ツールもビルドされるのだが,時間がかかって仕方ないので,Arduino環境からクロスコンパイラを抜き出して使ってみることにする.
Linuxの場合,ArduinoIDEのアーカイブを展開すると,次のようなディレクトリ構造になっているだろう.

ツール群は,hardware/tools/sysrootsの中にある.

$ ls hardware/tools/sysroots
i586-poky-linux-uclibc  i586-pokysdk-linux

このディレクトリの中にあるファイルをごっそり別の場所にコピーする.
少々荒っぽいが,この2つのディレクトリの中身をいっしょくたにしてしまおう(そうするとおさまりがよかった).

$ cd harware/tools/sysroots
$ sudo mkdir -p /opt/cross/i586-poky-linux-uclibc-x-tools
$ sudo cp -R i586-poky-linux-uclibc/* /opt/cross/i586-poky-linux-uclibc-x-tools/
$ sudo cp -R i586-pokysdk-linux/* /opt/cross/i586-poky-linux-uclibc-x-tools/

Makefile

Makefileは準備したので,これを使用すると良い.

SHELL = /bin/sh
TARGET_BIN    = helloworld
TARGET_ARCH   = -m32 -march=i586 --sysroot=/opt/cross/i586-poky-linux-uclibc-x-tools
INCLUDE_DIRS  = -I $(TOOLDIR)../include \
				-I $(TOOLDIR)../include/c++ \
				-I $(TOOLDIR)../lib/i586-poky-linux-uclibc/gcc/i586-poky-linux-uclibc/4.7.2/include 
LIBRARY_DIRS  = -L $(TOOLDIR)../../lib \
				-L $(TOOLDIR)../lib \
				-L $(TOOLDIR)../lib/i586-poky-linux-uclibc/4.7.2 \
				-L $(TOOLDIR)../lib/i586-poky-linux-uclibc/4.7.2 
COMPILE_OPTS  = -O2 -pipe -g -feliminate-unused-debug-types -fpermissive -Wall $(INCLUDE_DIRS) $(BOARD_OPTS) $(FIRMWARE_OPTS)

TOOLDIR = /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/
CC      = $(TOOLDIR)i586-poky-linux-uclibc-g++
CXX		= $(CC)
AS      = $(CC)
LD      = $(CC)
AR      = $(TOOLDIR)i586-poky-linux-uclibc-ar
CFLAGS  = $(COMPILE_OPTS)
CXXFLAGS= $(COMPILE_OPTS)
LDFLAGS = -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed $(LIBRARY_DIRS) --sysroot=/opt/cross/i586-poky-linux-uclibc-x-tools -lstdc++

all: target

target: $(patsubst %.c,%.o,$(wildcard *.c)) $(patsubst %.cpp,%.o,$(wildcard *.cpp)) 
	$(LD) $(LDFLAGS) $(TARGET_ARCH) $^ -o $(TARGET_BIN)

clean:
	rm -f $(TARGET_BIN) *.o

Hello World

せっかくだからHello, Worldでもやってみよう.
helloworld.c

#include <stdio.h>
int main(int argc, char const* argv[])
{
	printf("Hello, World!\n");
	return 0;
}

PCでmakeする.

$ make
/opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/i586-poky-linux-uclibc-g++ -O2 -pipe -g -feliminate-unused-debug-types
 -fpermissive -Wall -I /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/../include
 -I /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/../include/c++
 -I /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/../lib/i586-poky-linux-uclibc/gcc/i586-poky-linux-uclibc/4.7.2/include
 -m32 -march=i586 --sysroot=/opt/cross/i586-poky-linux-uclibc-x-tools -c -o helloworld.o helloworld.c
/opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/i586-poky-linux-uclibc-g++ -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed
 -L /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/../../lib
 -L /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/../lib
 -L /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/../lib/i586-poky-linux-uclibc/4.7.2
 -L /opt/cross/i586-poky-linux-uclibc-x-tools/usr/bin/i586-poky-linux-uclibc/../lib/i586-poky-linux-uclibc/4.7.2
 -lstdc++ -m32 -march=i586 --sysroot=/opt/cross/i586-poky-linux-uclibc-x-tools helloworld.o -o helloworld

$ file helloworld
helloworld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs),
 BuildID[sha1]=0x78594d3015aacfc8322039aa54927e3e6d9b4561, not stripped

これをsshか何かでGalileoに転送して実行すると,

root@clanton:~# chmod +x helloworld
root@clanton:~# ./helloworld 
Hello, World!
root@clanton:~#

抜き出したコンパイラでもっと遊ぶ

基本的にはGalileoで動くバイナリを吐くコンパイラとして使えるので,ある程度のものならそのままビルドしてしまえる.
例えば,拙作のマイクロマウスの迷路シミュレータ(旧バージョン)tokoro10g / mousesimなんかは,標準入出力と計算しかしていないのでテストとしては適している気がする.
ということでやってみた.やはり先ほどのMakefileを使ってビルド.(TARGET_BIN=adachitest)とした.

これも同様に転送して実行すると,

root@clanton:~# chmod +x adachitest
root@clanton:~# ./adachitest < mazedat/maze.dat
107b6c3e285c0db6667133e19b226f73.png

何の問題もなく動いた.

コメントはこちら



添付ファイル: fileMakefile 398件 [詳細] file107b6c3e285c0db6667133e19b226f73.png 355件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-02-13 (木) 23:35:36 (1508d)