先週、NetBSD 向けに USB-Serial デバイスドライバを書いたが、今度は Linux 向けにも用意してみた[trcom.tgz]。こちらはカーネルを再構築すること無しにダイナミックにロードできる。例によってとてもいい加減だが、Debian/GNU Linux 4.0r3 (kernel:2.6.18-6-686, IBM ThinkCentre A50) で minicom から使用できた。アーカイブにはローダブルモジュールも入れてあるからコンパイル作業なしに試すこともできる。
デバイスドライバのビルドには kernel の再構築用のパッケージをインストールし、次のような Makefile を用意した。
$ cat Makefile
obj-m := trcom.o
all:
make -C /usr/src/linux-source-2.6.18 M=$(PWD) V=1 modules
clean:
make -C /usr/src/linux-source-2.6.18 M=$(PWD) clean
make は一般ユーザで構わない。trcom.ko ができたら insmod コマンドでドライバをロード。
# /sbin/insmod /lib/modules/2.6.18-6-686/kernel/drivers/usb/serial/usbserial.ko
# /sbin/insmod ./trcom.ko
# lsmod | grep trcom
trcom 5060 0
usbserial 29128 1 trcom
usbcore 112644 5 trcom,usbserial,ehci_hcd,uchi_hcd
ボードを挿して dmesg で認識された様子。
drivers/usb/serial/usb-serial.c: USB Serial support registered for trcom
usbcore: registered new driver trcom
/home/masato/driver/trcom.c: 78K0 TRAGI-BIOS driver v0.01
usb 1-2: new full speed USB device using uhci_hcd and address 13
usb 1-2: configuration #1 chosen from 1 choice
trcom 1-2:1.0: trcom converter detected
usb 1-2: reset full speed USB device using uhci_hcd and address 13
usb 1-2: trcom converter now attached to ttyUSB0
無保証につき、使用は自己責任でよろしく。一応、NEC 版サンプル用のデバイス ID でも認識するようにしたが、動作は確認していない。
[参考]
[2008.10 追記]
Linux のバージョンによってはこのモジュールは使えない。ビルドもできない。
[2010.03.31 追記]
最近の Linux kernel でとりあえず動くようにしてみた。[78K0.tgz]
同じように make して insmod する。
minicom で使用する際には modem script の init / reset をクリアしたほうが良い。
しかし、Linux だとカーネルのマイナーバージョンが違うだけでソースレベルの互換性が失われたりするのはいただけないと思う。
masato様。
ネイティブなLinux 環境下で例の付録を活用されている情報を求めて、こちらへ辿り着きました。
trcom.tgz、公開して頂きまして ありがとうございました。
trcom.ko, 問題なく利用できることを確認致しております。
kernel 2.6.20 なlive CD(i386) にて、気持ち良く導入できました。
# 実は、/dev/ttyUSB0 をmknod していなくて、暫く悩んでしまいましたが...
minicom経由にてトラ技BIOSとやりとりできております。
また 78k0-01.pl もDevice::USB を導入して利用できております。
有り難く、使わせて頂きます。
しかし、Linux環境下では コンパイラはともかく アセンブラもないとは、ちと辛いトコロです。
目視アセンブルにも ほとほと疲れましたので、Perlか何かでTinyアセンブラみたいなものでも書くしかないのかなと 思っております。
ありがとうございます。
78K0 の開発ツールが Windows 専用なので Linux や NetBSD 向けのドライバは受けないのかなと思ってました。
まぁ、開発用というよりも USL-5P のようなデバイスにつなげて使うのが面白そうだと考えています。
masato樣。
依然、trcom.ko、有難く使わせて頂いております。
現在に至るも、Linux用のドライバとしては 唯一無二ではないでしょうか。
> Linux や NetBSD 向けのドライバは受けないのかなと思ってました。
そうですね。
blogなどでも、Linuxでコードを書いておられる方のエントリーはほとんど見かけませんね。
やはり、ベンダー純正の開発ツールがWinプラットホームだけで かつ よくできているということが、大きいのかもしれません。
> USL-5P のようなデバイスにつなげて使うのが面白そうだ
よく知らなくて申し訳ないのですが、玄箱のように ユーザーランドが与えられている
(といいますか、コジ開ける?)NAS箱なのですかね?
ネット越しで何かを操作するアプリケーション、いいですね。
# あ、I/F誌の付録が、正にソレでしたね... (^^;;
私は 10年落ちのノートに挿し、wlanでsshを張って 見通し距離程度の遠隔利用を試してみています。
# でも、肝心の78k0上のソフトが まだ全然ダメダメなんですが (X-p
その後、Linuxで利用できる78k0用のアセンブラを あれこれと探してみたところ、
次のようなクロスアセンブラを見つけまして 試してみました。
"Macro Assembler AS V1.42"
ttp://john.ccac.rwth-aachen.de:8000/as/as_EN.html
DOS発のクロスアセンブラのようですが、ソースがCで書かれている版はLinuxで利用できました。
各種UN*X用のMakefile設定も用意されていて、動作するプラットホームは多そうです。
多分、NetBSDでも容易にmakeが通るのではないかと思います。
しかし まぁ、ターゲットとして対応しているプロセッサの多いこと多いこと。
何だか ColdFireにも対応しているようです。
このアセンブラの出力は バイナリだけのようなので、トラ技BIOSに食べさせるために
Perlスクリプトで インテルHEX形式に変換するようにして利用しています。
あと、一部のニモニックに対するバイナリの出力が どうも間違っているようです。
NECの78k0アセンブラ仕様と比較して判ったことなので、たぶん間違えているのでしょう。
# うぅ。asisで 使えないですね。
結局、全てのアセンブリコードを入力してやって、一つ一つバグチェックをしてやらないと安心して使えないみたいです。
個人的に、少ーしずつ ソースを修正していっています。気長に。
# で、バグ取りが終わったら、既にアセンブラは必要なくなったりしていたりして... ^^;
色々と苦戦つつも、LEDを蛍点滅させるコードを書くことができました。
あと、この付録をきっかけに 78k0用の逆アセンブラを作られた方もおられるようです。
NEC78K用 逆アセンブラ
ttp://hp.vector.co.jp/authors/VA000177/html/NEC78K.html
こちらは問題なく動いてくれているようです。
逆アセンブラがあると、ものすごく助かりますね。
もうちょっと早く、これに出会っていれば... と思いました。
ということで、Linuxで動作する 78k0用アセンブラツールについて、でした。
長くて冗長なコメント、御目汚し 申し訳ありません。
78k0用アセンブラツールなどの紹介、ありがとうございます。
USL-5P は内蔵 HDD を持たずに USB 接続 HDD を使用する NAS 箱のようなものです。こうしたものの I/O デバイスとして 78k0 基板を使ってみようかと考えていたのでした。
Posted by: masato at 09/03, 2008 12:50 PMおそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。