2008/09/27(土)TOPPERS/ASP kernel環境

前置き

先日,sh-elf-gcc環境をbuild/installした.
今回は,TOPPERS/ASP kernelを導入したいと思う.OSEK,JSP kernelもあるが,新しい物好きということでASP kernelを持ってくる.
以後,SH系の開発環境は,基本的にcygwin環境上で行うこととする.



[TOPPERS]ASP kernelを使ってみる

ファイルの展開

まず,/home/xxxx/ 以下(どこでもいい)にkernelのアーカイブを展開する.

$ cd ~
$ zcat /cygdrive/c/Workspace/asp-1.3.2.tar.gz  | tar x
$ zcat /cygdrive/c/Workspace/asp_arch_sh12a_gcc-1.3.1.tar.gz | tar x

順序が前後するが,sh12a環境においては,hwe環境に入っている,asp/pdic/sh以下のファイルを同名のディレクトリに展開しておく必要がある.
architecture依存部として,SH向けは以下の2種類がある.今回はgccをtargetとしたので,gccだけを解凍していた.ところが,asp/pdic/sh 以下が, HEWにしか存在していない.

  • SH1/2Aアーキテクチャ・GCC依存部パッケージ
    asp_arch_sh12a_gcc-1.3.1.tar.gz
  • SH1/2Aアーキテクチャ・HEW依存部パッケージ
    asp_arch_sh12a_hew-1.3.1.lzh

ということで,lzhを解凍して,c/hの改行コードをLFのみに変えて保存し,pdic/sh/へ移動させた.


kernel configuratorを作る.

$ cd asp/cfg
$ make depend
# make

ただし,C++のlibraryであるところのboostが必要となる.ver.1.33での構築が実績のある環境だ.
ただし,cygwin環境では決めウチされる模様.Makefileの冒頭でこうなっている.

ifndef BOOST_DIR
	ifndef BOOST_VERSION
		BOOST_VERSION = 1_33_1
	endif
	ifeq ($(OSTYPE), msys)
		BOOST_DIR = /mingw/include/boost-$(BOOST_VERSION)
	else
		ifeq ($(shell echo $$OSTYPE), cygwin)
			BOOST_DIR = /usr/include/boost-$(BOOST_VERSION)
		else
			BOOST_DIR = /usr/local/include/boost-$(BOOST_VERSION)
		endif
	endif
endif

自力でboostをmake/installしてみた(ver.1.36)が,引数をなにも指定せずに行ったため,install prefixは/usr/local/以下になってしまった.作られたライブラリ等,微妙にまずかったようで,リンクエラーとなった...orz
参考まで,boostディレクトリの指定方法を記録しておきます.

% make depend "BOOST_DIR=/usr/local/include/boost-1_36"
% make "BOOST_DIR=/usr/local/include/boost-1_36"

で,結局cygwinのsetupプログラムで更新をして終了.既存のcygwinに対しても,setupで更新ができる模様です.便利ですな...


sampleプログラムを作る

kernel環境には,サンプルコードもmakeで作れるようなものが用意されている.JSP kernelのときは,ターゲットアーキテクチャとを指定する必要があるのに対して,ASP kernelではターゲットのみでよくなっている.
そりゃまぁ,ターゲット同じでアーキテクチャが異なることは考えづらいですしね...
今回のsh12a-gcc環境に含まれているアルファプロジェクトのターゲットソフトを作ってみましょう.

$ cd ~/asp
$ mkdir app01
$ cd app01
$ ../configure -T apsh2a_gcc -D ..
$ make depend
$ make

これで,asp.(exe|srec|syms)のあたりが生成されます.コードができたか確認したいので,ちょっと見てみましょう

$ sh-elf-objdump -D asp.exe

ダーッと逆アセンブルコードが出てきますナ.



次回予告

次は,CQ7144としてターゲット環境の構築を進めていきます.
ささっとググったところ出てこなかったので,作らざるを得ないというところですね.無念...

2008/09/17(水)[cygwin][SH2][組込] cygwin 上に,クロス開発環境を構築する~SH編~

結論:linuxマシンを持ってきたほうが早い... VMwareがあるならそっちのがいいんじゃね?

前置き

まだ実績は無いです.cygwin上でSH2のクロス開発環境を用意する.. 途中.
buildが終わらないから中断した. 前線基地でもとりあえずbuildまわしっぱなしで寝てみる...
KPITやHEWやら使って TOPPERS kernelをbuildして~,と考えていたのだけれど,なんかしっくりと来ない.perl/awk/make等全部同じ環境(dll含めて..)で動くものを用意したほうが安定しそうなのでこうなった.本当は無償版HEWで環境作れたらよかったのだけれど,アーキテクチャ依存部を持ってきてTool chain違いで跳ねられたのであきらめた.コンフィギュレータはcygwin/VC++の両方で作るところまでやった.Boost lib.が要るなど,案外面倒だ.手軽に使いづらいのと,開発環境のメンテを考えると,市販のRTOSを選択するのが賢いと思われる.TOPPERSをhackして自分でカスタムできるレベルであればその限りではないが....


必要ファイルをそろえる

下記のファイルを拾ってくる.


TOPPERS/ASPカーネルのbuild環境は,以下のとおりらしい.とりあえず新しい物好きなので上記で試してみる.

  • binutils-2.16.1.tar.bz2
  • gcc-3.4.4.tar.bz2
  • newlib-1.13.0.tar.gz

*1 : jaistなどのGNUソフトミラーサイトから探してください..

手順

ここではcygwin環境での操作をメモしておく.パス名等は適宜読み替えて対応されたい.

下準備とbinutilを作る.とりあえずhomeディレクトリ配下において様子を見る.

$> mkdir -p usr/bin
$> mkdir -p usr/src
$> mkdir -p usr/tmp/binutils-build
$> cd usr/src
$> bzcat /cygdrive/c/temp/cross/binutils-2.18.tar.bz2 | tar x
$> bzcat /cygdrive/c/temp/cross/gcc-4.3.2.tar.bz2 | tar x
$> zcat /cygdrive/c/temp/cross/newlib-1.16.0.tar.gz | tar x
$> cd usr/tmp/binutils-build

$> ../../src/binutils-2.18/configure --prefix=/home/XXXXX/usr --target=sh-elf
$> make && make install

$> export PATH=/home/XXXXX/usr/bin/:$PATH

GMPをひろってきて,解凍して...面倒くさいなぁ..

> ./configure
> make
> make check
> make install

MPFRも configure, make しないとだめぽいな... GMP先に入れないとダメです.

> ./configure
> make
> make check
> make install

で,ようやくgccのクロスコンパイラとnewlibが作れる.

$> mkdir -p usr/tmp/gcc-build
$> cd usr/src/gcc-4.3.2/
$> ln -s ../newlib-1.16.0/newlib .
$> cd ../../tmp/gcc-build/
$> ../../src/gcc-4.3.2/configure --prefix=/home/XXXXXX/usr --target=sh-elf --enable-languages="c" --with-newlib
$> make
 ... (E6600/MEM2Gで18時間程度かかりました)
$> make install

cygwinだと数時間オーダ18時間.. newlibのbuildがアーキテクチャごとに全部回るみたい('A`


おまけ

MPRF/GMPを入れなかった場合.昔と同じようにGCC,binutil,newlibだけでbuildを試みた例.makeに失敗するので気づくでしょう...

$> mkdir -p usr/tmp/gcc-build
$> cd usr/src/gcc-4.3.2/
$> ln -s ../newlib-1.16.0/newlib .
$> cd ../../tmp/gcc-build/
$> ../../src/gcc-4.3.2/configure --prefix=/home/XXXXX/usr --target=sh-elf --enable-languages="c" --with-newlib

> configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.0+.
> Try the --with-gmp and/or --with-mpfr options to specify their locations.
> Copies of these libraries' source code can be found at their respective
> hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
> See also http://gcc.gnu.org/install/prerequisites.html for additional info.
> If you obtained GMP and/or MPFR from a vendor distribution package, make
> sure that you have installed both the libraries and the header files.
> They may be located in separate packages.

エラーがでる.いつの間にかいろいろライブラリを要求するようになってしまったようだ.