Raspberry Pi 上で mruby を Linux 抜きで動かす
ファイル
- Rakefile : Makefile の変わりに全部 Rakefile にビルド定義を書いてある
- build_config.rb : mruby のビルド設定ファイル。ビルド時に mruby のディレクトリに symlink している
- main.rb : Ruby レベルのエントリポイント。コンパイルされたバイトコードが使われる
- main.c : C 言語レベルのエントリポイント。mruby_open() して実際にバイトコードを実行するプログラム
- bytecode.h : コンパイル済みの main.rb を C のヘッダファイルにしたもの。バイトコードデータファイル
- memmap : リンカスクリプト (メモリ上にオブジェクトをどう配置するかの定義)
- syscalls.c : newlib が要求するシステムコールのモック的実装 (ほぼ参考文献からのコピー)
- vectors.s : アセンブラレベルのローレベル処理定義
- mrbgems/mruby-raspberrypi-gpio/ : Raspberry Pi の GPIO を使うための mrbgem。ビルド時に mruby の mrbgems ディレクトリに symlink している
- kernel.img : ARM 実行形式のファイル。これを SD カードにコピーして実行させる
- .gdbinit : arm-none-eabi-gdb を実行したときにコンパイル済み main.elf を実行するためのもの
動かしかた
クロスコンパイル環境をつくる
https://launchpad.net/gcc-arm-embedded を入れてパスを通す
ビルド
rake を実行すると mruby のクローンからビルドまで一気にやり kernel.img ができる。
SD カードへコピー
FAT16 でフォーマットした SD カードを入れて以下のコマンドを実行する
rake install dest=/Volumes/SD
すると必要なファイルが(必要に応じてダウンロードされて)SDカードにコピーされ、SDカードはイジェクトされる。
Raspberry Pi で実行
Raspberry Pi に挿しこんで、電源を挿す。 基板上にある ACT LED (緑色) (電源を挿しただけで光る PWR LED の隣) が点灯する。
最初すこし ACT が点滅するのは、バイナリがロードされているとき光るようになっているからっぽい。
それが終わるとこちら側のコードが動く。ACT LED は GPIO 16 に繋っているので、GPIO 16 に対していろいろやってる。
TODO
vfp を使った場合うまく動かすことができていない。 コードの問題というより環境構築がうまくいってない。
JTAG の環境をつくれてないのでデバッグが面倒。