前に秋月のH8/3664用のgccとか突っ込んだし、これでイケるのかなと思ったので試してみたんだが…どうもh8300-hmsではなくh8300-elfな環境が必要らしい(理由は後述)。
という訳で、まずはh8300-elfな開発環境を構築する。T-EngineフォーラムにもCygwin向けのバイナリとソースコードが転がっているが、なんとなくLinux上で俺環境を作ってみたかったので作ってみた。
- binutils-2.17
- cd binutils-2.17; mkdir h8300-elf; cd h8300-elf; ../configure --target=h8300-elf --prefix=/usr/local; gmake; gmake install
- gcc-3.4.6, newlib-1.15.0
- cd gcc-3.4.6; ln -s ../newlib-1.15.0/newlib .; ./configure --target=h8300-elf --enable-languages=c --with-newlib --prefix=/usr/local; gmake; gmake install
前にh8300-hmsなgcc-3.4.5を作った時のやり方では、何故かコンパイル中にtsystem.h絡みのエラーが起きる。理由は分からない。
出来上がったh8300-elf用の開発環境で、Strawberry-Linuxのサンプルプログラム(h8led-0.1-20020706.tar.gz)にLEDのポート修正用パッチを当ててコンパイルしたら、h8300-hmsの時と同じh8led.motが得られた。※サンプルプログラムのh8-3664.xにあるOUTPUT_FORMATは、coff-h8300をelf32-h8300に修正する必要がある。
T-Engine ForumからμT-Kernelのソースコードおよび説明書の類(imp_h8s2212.pdf, utkernel.1.00.00.tar.gz, utkernel.txt)をダウンロードしたら、とりあえず展開。
基本的には説明書(utkernel.txt)の「6. μT-Kernel の構築」に従うことになるが、注意すべき点を以下に書いておく。
- 環境変数BD
- BDに関しては、utkernel.txtの説明に従えば良い。
- 環境変数GNU_BD
- これは、$(BD)/etc/makerules, $(BD)/etc/sysdepend/app_h8s2212/makerules.sysdependで参照しており、h8300-elf-objcopy, h8300-elf-cppへのパスを記述する必要があるようだ(AT91(ARM)でも同様の状況にある)。とりあえず、/usr/local/binにh8300-elf-objcopyが存在するのであれば、export GNU_BD=/usr/localとでもしておけば良いのだろう。
- $(BD)/etc/{mkfuncfiles,mkiflib,mktdsvc,mktksvc}
- Perlの存在が、/usr/local/bin/perlを前提としているため、/usr/bin/perlな人は要修正。
- $(BD)/etc/makerules
- TOOL_ORIGIN = "environment" "command line"の行はコメントアウトして、makeする前にexport TOOL_ORIGIN=GNUh8300; export GNUh8300=/usr/local/h8300-elfで環境変数を設定。
h8300-hmsでは、.Sの類(例:libtkにあるdisint.S)がアセンブルできない。という訳で、h8300-elfの環境が必要になる。
あと、超漢字開発環境をインストールしている場合は、環境変数BD, GNU_BDの設定に注意すること。下手をすると、超漢字開発環境でμT-Kernel/H8のソースコードをコンパイルしようとして、おかしなことになる。
こちらでμT-Kernel for H8S/2212のビルドを試した際のログ、およびオブジェクトと共に得られたkernel-rom.mapを置いとく。kernel-ram.mapも得られるが、kernel-ram.lnkには「For this target, RAM version is not available.」という記述があるため、RAM版の存在は無視した方が良さそうだ。
ざっと見る限りでは、カーネルだけの状態で、ROMの消費量が14976(14928+48)byte, RAMの消費量は10104byteかな。H8S/2212のRAMが12224byteだから、余りは…
実は、H8/3664F(ROM 32Kbyte/RAM 2Kbyte)にμT-Kernelが載ったら面白いかなと思ってこんなことを始めてみたのだけど…似たようなCPUと言えど、一筋縄ではいかないものだねえ。
$(BD)/config/sysdepend/app_h8s2212/utk_config_depend.hに最大タスク数などの定義が書いてあるから、これをいじってkernel-rom.mapで示されるメモリ使用量をどこまで減らせるか、というところから始めてみますか。
18-Aug-2007: 朝:寝てた。昼:妻の実家にて。夕:橋本で飲み会。
19-Aug-2007: 朝:寝てた。昼:妻にお任せ(スパゲティ)。夕:白飯、冷凍庫にあった焼鳥、キャベツの炒め物。(21:50)
21-Aug-2007補足:細かい誤字脱字、H8の型番(3664N→3664F)、H8S/2212のRAM容量(12288byte→12224byte)を直しています。