(H8移植編その2第14回)シミュレータのLinux対応

2011/05/02

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

前回の更新からだいぶ間があいてしまった. ここ数ヵ月で連載を2本始めたのでそっちの原稿書きと,あとは新しい勉強会とか 始めたのでいろいろと忙しくてOSいじっている暇が無かった.

ということで久々の更新.シミュレータをLinux対応して,Linux上でも動作する ようにする.とはいっても実は最近の発表でのデモはWindowsXP上のandLinuxで 行っていて,Linux対応のコーディングだけはすでにやっていたのだけど, ここで公開しておこう.ちなみに Linux 対応に関しては独自に行っている人もいて, 詳しくはこちらを参照.

まずシミュレータのLinux対応だけど,必要なのは2点で, 疑似シリアルデバイスの対応と疑似ネットワークデバイスの対応だ.

疑似シリアルに関してはシミュレータ編第2回 で説明していてFreeBSDのptyを利用している.しかしこれはLinuxではそのまま 使えないようだ.なので手を入れる必要がある.

FreeBSD用のコードでは /dev/ptyXX で使えるやつを検索するようなことをやっていて openpty()のソースを参考にしているのだけど,Linuxの場合は調べてみたらもともとは /dev/ptmx というデバイスファイルで同等のことができたようだ.しかし実は 今では posix_openpt() というインターフェースで行うのが正式な方法になっている らしい.しかも posix_openpt() は FreeBSD でも利用できるので,これを使えば FreeBSD/Linux でソースコードを共通化できそうだ.ということで,そーいうふうに 対応追加した.

さらに疑似ネットワークデバイスの対応だ.FreeBSDではtapデバイスを利用して 実現したが,Linuxでも同等のことができるらしい.ただしLinuxではtunデバイスに 統合されていて,/dev/net/tunXXをオープンしてからTAPデバイスのフラグを立てる, という手順で行うようだ.

で,修正したソースコードは以下.

今回はシミュレータのLinux対応用の修正のみなので,gdb側での修正のみになる. 具体的には,device.c に対する修正だ.

ただし上述のとおり疑似シリアルデバイスに関しては FreeBSDの場合も posix_openpt() を使うことでコードを共通化できるはずだが,動作未確認なので, FreeBSDの場合はいちおう旧来のコードのままになっている.気が向いた人は試して みて.


メールは kozos(アットマーク)kozos.jp まで