ちょっとAVRに触れる機会ができたので,勉強がてらKOZOSを移植してみた. とりあえずGDBシミュレータ上での動作.かなりシミュレータべたべたな実装なので 実機では動かないと思う.
ひとまず以下が移植したコード.
クロスコンパイル環境はアセンブラ本 のものを利用.移植ベースは12ステップ本の最終コード(12ステップ目)を利用.
GDBのAVRシミュレータのコードにシリアル疑似デバイス対応と割り込みの対応を 入れてある.シリアル疑似デバイスはH8シミュレータ対応の現時点での最新のもの (H8移植編その2第15回)をそのまんま流用. (つまりAVR上にH8のSCIが乗っかっているというヘンな構成)
割り込みベクタとかも実機をあまり調べず(OS側も,GDB側も)テキトーに 対応しているので,実機ではそのままでは動かない.
環境はFreeBSD-8.3上で確認した.シリアル疑似デバイスはFreeBSD/Linux両対応の
ものなので,Linuxでも動作するのではないかな.(未確認)
(2012/07/30追記:CentOS5.8の環境で確認できました.そのまま問題なく動作しました.なおCentOS環境ではcuが無かったのでminicomを利用しましたが,ハードフロー制御などをすべてOFFに設定する必要がありました(でないと起動後にKOZOSがシステムエラーで停止する.フロー制御関連で,いらんデータが流れているためと思われる))
使いかたは以下.
% cd gdb-7.3.1/sim/avr % patch < ~/Makefile.in.orig % patch < ~/interp.c.orig % cp ~/device.c . % cd ../../gdb % patch < ~/avr-tdep.c.orig
% cd gdb-7.3.1 % ./configure --target=avr-elf --prefix=/usr/local/cross --disable-nls % gmake
% ~/gdb-7.3.1/gdb/gdb kozos.elf
(gdb) target sim (gdb) load
(gdb) target sim Connected to the simulator. (gdb) load connect to /dev/ttyp0 (gdb)以下のようにしてcuとかminicomでそこに接続する.
# cu -l /dev/ttyp0 Connected
(gdb) runあとはシリアル側にいつもの起動メッセージが出てくる.
letsnote# cu -l /dev/ttyp0 Connected kozos boot succeed! command> echo test test command>