S.F. Page

Programming,Music,etc...

ラズパイ(Raspberry Pi )におけるベアメタル開発環境を調べる

ベアメタル・プログラミングをやってみたいと思って、どこから手を付けたらよいか考えていた。

やっぱりデバッグ環境が重要だ。コンパイルはWindows10で行って、それをラズパイに転送して実行させるのが良い。さらにはリモートデバッグを行いたい。そうしないとバグが出たときラズパイ側で何が起こっているか原因を究明するのに非常に時間がかかり、私はもうそこで投げ出してしまうだろう。

リモートデバッグを行うには、もう一択しかないようである。JTAGというやつである。これはデバッグ用のインターフェースの規格だそうだ。これに対応した機器(USB to JTAGインターフェース)が比較的安価で手に入る。これを使ってPCとラズパイをつなぎ、フリーソフトウェアをいくつか組み合わせるとICEに近いデバッグ環境が構築できるようである。

しかしこの環境を構築するのは私にとってすでにハードルが高いなあ。。

ラズパイでベアメタルをしたい

こんな小さなマシンで立派なデスクトップOSが動くさまを目の当たりにしてつい興奮してしまった私であるが、このためにラズパイを買ったのではない。

ラズパイで行いたいのはずばり「ベアメタルな自作ゲーム」である。OSを介さずに自作ゲームを動かしたいのである。できるだけアセンブラでコードを書いて作成したいとも考えている。ゲームはスカッシュとか、ブロック崩しとか簡単な内容のものでよいと考えている。

昔のアーケード・ゲーム基板はベアメタル・プログラミングそのものである。ブートするとセルフテストを行って、初期設定からタイトル画面の表示に至るまでのコードを自分で書くのである。 ただゲーム会社にいたころにはすでにブートからスクラッチでコードを書くことはなく、ライブラリ・コードがあって(それをゲーム・メインとか呼んでいたが)、それを基板に合わせて若干改変することで初期設定ができるようになっていた。なので先輩からそのようなコードを譲り受け、いわゆるゲームのアプリ部分を書くだけでよくなっていた。結局自分でそのようなコードを書く機会もあまりなくわずか2-3年で足を洗ってしまったのであった。

それはさておき、最近かなり前に買った(もう10年ほど前になるだろうか)「新・電子立国〈4〉ビデオゲーム・巨富の攻防」を読み返して、インベーダーゲームの西角さんのくだりを読んで、スクラッチでブートからコードを書くって面白そうだなあと思うようになった。

ラズパイを見たとき、そのようなコードを気兼ねなしに書けそうな気がした。PCは自分用に1台しかないので、そのような環境でブートするコードを1から書くというのは非常にリスキーだからね。ラズパイだったら、乱暴なコードを書いても、PCに影響を及ぼすことはない。また、ジョイスティックなんかのペリフェラルも簡単に接続できそうな気もしたので。

で、ここ2,3日Cortex A53の仕様やら、BCM2837 SoCの仕様やらを読んでみているが、SoCの仕様を理解するだけでも並大抵のことではないことが分かった。あとプログラミング環境を構築するのもなかなか面倒そうではある。まずはアセンブラ・コードを書いて、ブートして実行できるようになるまでを目指そうか。例によってそこまででおなか一杯になりそうな気もするけどね。

なんとなくBash on Ubuntu on Windows上で環境が作れないかなぁとか思っている。まあぼちぼちやっていこうか。

raspbian (jessie) のPIXEL GUIは面倒な日本語設定がとても簡単にできるようになっている。

raspbian OSはWindowsのように、インストール時に言語を先に設定すれば後はお任せとはいかない。日本語を使うための設定が必要である。 日本語設定方法はネット上に大量にある。が、ネット上のリソースではraspi-config+コマンドラインによる設定が多い。しかしPIXELデスクトップを使うのであれば、ほとんどの設定はGUIで設定可能で、しかも簡単であることがわかった。ただ日本語入力(IME)だけはコマンドで設定したほうが簡単であった。

設定は「メニュー」→「Preference」→「Raspberry Pi Configuration」→「Localisation」で行う。

ロケールの設定

日本語表示を行うには必須の設定である。この設定も「localisation」にある「Set Locale」で簡単に設定できる。Languageを「ja」、Countryを「JP」、Character Setを「UTF-8」に設定する。

https://ahn0xq-bn1305.files.1drv.com/y3moBUH4oAvPZzbFRSrTcsxB45tPIMGaiyQzTzbQf0Y9QlOyxuHWjBSYQhLvAIFmJMYJcUd_AXAGx8z1ZYJidNsbZQKCS6R-r8jDI09q2P7ze75p7iF2AUx6ed2bY4lNBPMy6cBxbAcs8LykxxvaxHRKviWNgCbFF3AGK8qohARW-s?width=921&height=444&cropmode=none

日本語キーボードの設定

この設定は「localisation」にある、「Set Keyboard」ボタンをクリックする。Countryは「Japan」、Variantは「Japanese(OADG 109A)」を選択する。

https://bhlzuq-bn1305.files.1drv.com/y3mPdxGkPIRTFtbSzwDgu2xOPvNUrjCA-2H36mvQJBeWTfcLPD94TZs1v_Qi07uSSteIFdfHr4I51x5-rGw7gXYwdxQmkIjCUcxux6hmdG38WuRGugMc1l4wiC8cQfNr_TQDFtDYzpBGDurQlLV41WXqT9qItMDqFwMYFgG09G_8HA?width=729&height=578&cropmode=none

タイムゾーンの設定

この設定は「Set Timezone」で行う。「Area」は「Asia」、「Location」は「Tokyo」を設定する。

WiFi Country Codeの設定

この設定は「Set WiFi Country」で行う。「Country」に「JP Japan」を設定する。

ここまで設定したら、Localisationメニューの「OK」ボタンをクリックする。

そうすると再起動を要求されるので、再起動する。

そうするとメニューがある程度日本語化される。ところどころ英語のままだったりして、ローカライズ具合がなんとも微妙であるが。

日本語入力の設定

いろいろ調べてみると、日本語入力の方法もいろいろあって、悩ましい。いろいろ調べたところ、uimというものと、mozcというGoogleが作った日本語変換システムを使用するのがよさそうだ。この設定だけはLX Terminalで行ったほうが簡単である。別の方法としては「設定」にある「Add/Remove Software」でやる方法があるが、uimだけでもいろいろなモジュールがあって、どれをインストールすればいいか私のような初心者にはよくわからないのである。

LXTerminalはメニュー上のショートカットがあるので、クリックすれば起動する。

起動したらコマンドラインにsudo apt-get install uim uim-mozcとタイプして、enterするとインストールされる。途中でインストールかどうか聞かれるので、Yを押してインストールを続行する。

インストールが完了したら再起動する。そうすると、メニュー右に下記のようなアイコンが表示されているはずである。これで半角/全角を押すと日本語入力ができるようになっているはずだ。

これで日本語設定は完了である。