(AVR編第1回)GDBシミュレータで動作させた

2012/07/29

あなたは 人目のお客様です.

ちょっと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がシステムエラーで停止する.フロー制御関連で,いらんデータが流れているためと思われる))

使いかたは以下.

  1. AVR向け binutils, gcc を --prefix=/usr/local/cross でビルドし インストールする.今回はアセンブラ本 向けに構築した環境をそのまま使った.
  2. gdbにパッチ当てしてビルドする.パッチは上記ソースコードのフォルダに 以下の4つのファイルが置いてある.gdbのバージョンは gdb-7.3.1 を利用. 以下のようにしてパッチ当てする.
    % 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
      
  3. gdbをビルドする.
    % cd gdb-7.3.1
    % ./configure --target=avr-elf --prefix=/usr/local/cross --disable-nls
    % gmake
      
  4. 上記ソースコードをダウンロードしmakeすると,kozos.elfが作成される.
  5. 以下のようにして起動する.
    % ~/gdb-7.3.1/gdb/gdb kozos.elf
      
  6. gdb起動したら以下を実行.
    (gdb) target sim
    (gdb) load
      
  7. 「connect to /dev/ttyp0」みたいにしてシリアルの疑似デバイスを 言ってくる.
    (gdb) target sim
    Connected to the simulator.
    (gdb) load
    connect to /dev/ttyp0
    (gdb) 
      
    以下のようにしてcuとかminicomでそこに接続する.
    # cu -l /dev/ttyp0
    Connected
      
  8. gdbでrunで実行開始.
    (gdb) run
      
    あとはシリアル側にいつもの起動メッセージが出てくる.
    letsnote# cu -l /dev/ttyp0
    Connected
    kozos boot succeed!
    
    command> echo test
     test
    command> 
      
さて,何をやって遊ぼうかな.
メールは kozos(アットマーク)kozos.jp まで