無関係のAVR32の話題を。
最近LAN対応の小さいシステムとして、AVR32とH8をいじっています。
H8の方はtoppers+tinetであれば公式ドキュメントが完全に説明して
くれているのでなんとでもなりそうですが、
AVR32の方はなかなか大変でしょうね。
開発環境をインストールしたあと結構途方にくれるきがします。
TCP/IPをやりたい場合はlwipを使うのが良さそうですね。
ここではlwipの導入方法は説明せず(というか昔のことなのでやり方忘れた)、
ROM Writer無しで開発できる環境を作る方法について書き残しておこうかと思います。
本来こういったリソースの少ない開発ではボードとICEとセットで使い、
ICE経由でファームウェアを書き込むのが普通なのでしょうが、
このボードの場合はUSBをもち、PCと接続すると本体自身が
デバッガになるという機能があります。
デバッガになるためにはその機能を持つブートローダーを入れる必要があります。
Flashの先頭にはそのブートローダを書きこんでおきます。
後半はあけておき、PCから自由にファームウェアを入れることができます。
ファームウェア側にも変更が必要で、ブートローダーの分ずれたアドレスに
コードが 配置されるようにしなければなりません。
・環境
EVK1100。
どうやら最初からブートローダーが書きこまれているという話。
もし書きこまれていなければ、初回はやはりWriterが必要で、一度bootloaderを
書きこむ必要がある。
ブートローダーはDFUブートローダーと呼ばれています。
開発環境はAVR32 studioとそれに対応したコンパイラ。
DFUブートローダーを利用してファーム書き込みを行う場合は、
PC側にDFUのドライバが必要。
それはFLIP3というソフトウェアが必要となります。
ドキュメントは
「AVR UC3 USB DFU Bootloader」という名前のPDFがあります。
これを読めばすべて書かれているはずです。
・ビルド
trampolineという仕組みを含めてビルドします。
ドキュメントの「Adding or Removing the Trampoline」に書かれているとおりです。
たぶん。
・DFUブートローダーで起動
DFUブートローダーモードで起動するには、
スティックを押しながら電源を投入します。
電源はPCからのUSB給電がよいでしょう。
PCではEVK1100はDFUとして見えます。
Windowsであればデバイスマネージャーで見えるはずです。
初回はドライバのインストールが促されます。
予めFlip3をインストールしてあれば、Flip3のインストールディレクトリのUSBディレクトリ以下にドライバがあるはずです。
・AVR32 studioからDFUを使うように登録
AVR32のtargetというペインで、DFUを登録します。
これもドキュメントのとおりです。
・fusesの保存
targetを右クリックして、read fusesでファイルにfusesの内容を
保存しておきます。
そのファイルを開くとGUIでfusesをいじれますが、GPの値に注目してください。
0x7になっているかもしれません(ビット0x4が立っている。立っていないケースも有るかも。このビットはユーザーの書き込んだファームを実行するかどうかのフラグ)。
ファームを書きこむ際には、このビットを落とす必要があるので、
もし0x7とかになっていたら、0x3に直して保存しておいてください。
fusesはファームを書き込むときに使います。
・ファームウェアの書き込み
以降の手順はファームウェアを変更するたびに行います。
targetで右クリックし、programを選びます。
(runとかdebugからは実行できないのが残念)
ファームは、debug/〇〇.elfとかrelease/〇〇.elfとか
elfファイルです。
注意点としては、書きこむ前にflashの消去を行う必要があることです。
書きこむ画面で、unlock and erase のチェックボックスをチェックして下さい。
書き込みが終わったら、次にfusesの書き込みが要ります。
どうやらファームを書き込んだりfusesを読み込むと勝手にfusesが書き換わるようで、
ユーザーが書き込んだファームを実行するためには書き換えが必須です。
targetを右クリックしてprogram fusesを実行します。
保存しておいたfusesを選んで書きこんでください。
以上で、ファームウェアの書き込みが完了です。
ROMに書きこまれたので、電源を切ってもファームは残ります。
・実行
再起動するとユーザーフォームが立ち上がります。
以降は、
ビルド→DFUモードで再起動→ファームの書き込み→fusesの書き込み→再起動
という流れで作業を行います。
面倒ですね。
・まとめ
ほとんど公式のドキュメントに書かれているとおりですが、
Flashの消去を忘れない、ファーム書き込みの時にfusesも書きこむのを忘れない、
という注意点があります。
2011年6月13日月曜日
2011年6月9日木曜日
Cでモジュールを書く
Cでモジュールを作成し、limboで使用する
http://powerman.name/doc/Inferno/c_module_en
だそうです。
ここに書かれている方法に従えばいけました。
OSX で試しましたが、ちょっとはまった点がありました。
紹介されている方法はLinuxが前提となっているので、OSX用にちょっと
手直しが必要でした。
emu/MacOSX/emuを編集し、modにexampleを追加します。
これでパフォーマンスが必要なところはCで書く、なんてことが可能になります。
クール。
ただ、JITの1.3-1.5倍速くなる、だそうで、もともとLimboのパフォーマンスは高いのでしょうね。
http://powerman.name/doc/Inferno/c_module_en
だそうです。
ここに書かれている方法に従えばいけました。
OSX で試しましたが、ちょっとはまった点がありました。
紹介されている方法はLinuxが前提となっているので、OSX用にちょっと
手直しが必要でした。
emu/MacOSX/emuを編集し、modにexampleを追加します。
これでパフォーマンスが必要なところはCで書く、なんてことが可能になります。
クール。
ただ、JITの1.3-1.5倍速くなる、だそうで、もともとLimboのパフォーマンスは高いのでしょうね。
2011年5月28日土曜日
DSでinferno
Infernoの動く環境をいくつか確保しておきたいということで、
DSでのInfernoの起動を試してみました。
必要なものは、ユーザープログラムをDSにロードする装置ですが、
今回試したのは
・R4i SDHC
・R4DS
の二種類です。前者はよくわからず最新ぽいのを買ってみたのですが、
残念ながら動きませんでした。
DSLinuxも駄目だったので、どうしょうもない。
無駄な出費でした。
R4DSではLinux、Inferno どちらも動作しました。
infernoは http://code.google.com/p/inferno-ds/で公開されているバイナリを使用しました。
icds.ndsというファイルです。
これをSDカードに入れてロードすると、infernoが立ち上がります。
上の画面には画像が表示されます。
下の画面はWMが表示され、タッチパネルでの操作ができます。
ボタン1,2,3の区別はL/Rボタンで行うようです。
起動時になにか音が出るので、サウンドも有効みたいですね。
keyboardというソフトウェアキーボードプログラムがあるので、
文字入力も可能です。
かっこよすぎ。
さて、次に行いたいのは自分でビルドして動かすことですが、
なぜか自分でビルドしたバイナリでは起動しませんでした(画面が白いまま)。
困った。
これを追うのは大変そうです。
2011年5月27日金曜日
infernoはjslinuxで動くか?
jslinuxというものがあります。
なんと、ウェブブラウザのJavascriptで386のエミュレーションをし、
その上でlinuxが動くというのです。
http://bellard.org/jslinux/
素晴らしいです。
さて、新しい環境が出てきたら、そこでinfernoが動くのか考察するのが礼儀です。
この環境は386上のLinuxということで、普通にLinux上でビルドすると動くような気がしますね。
結論から言うと、FPUが原因で動かなかったのですが。
キャラクターコンソールオンリー、ディスクスペースが全部で最大4Mbyteなどの制限があり、
ミニマムなビルドにしないと動かなそうです。
・手順
1. ローカル環境、ディスクの用意
http://blog.livedoor.jp/dankogai/archives/51683749.html
を参考にローカル環境と4Mbyteのディスクを作ります。
cpux86.js, cpux86-ta.js, index.html, jslinux.js, linuxstart.bin, root.bin, term.js, vmlinux26.binがあれば動くようです。
2. mkconfig の編集
普通にセルフビルドする設定にしておく。
SYSHOST=Linux, OBJTYPE=386。
3. ミニマムなビルドのためにいらないものを削る
emu/Linux/emu-gを編集。
dev: env, prof, dup, ssl, cap, indir, ip, eia, mem
mod: math, srv, keyring, crypt, ipints, loader
あたりをコメントアウト。
4. ビルド、strip
mk CONF=emu-g install
こうすると、GUIを持たないemu-gというプログラムが出来る。
strip emu-g でダイエットしておく。
5. 必要なファイルをディスクイメージにコピー
作ったemu-g、必要なライブラリ、必要なdisをコピーしておく。
emu-gは/binに、ライブラリは/libに、disは/root/inferno/dis/においた。
ライブラリはldd emu-gで表示されるライブラリをコピー(ホストのlinuxのものをコピー)。
libpthread.so.0も元々あるやつだとダメっぽいのでこれもコピー。
必要なdis は
lib/bufio.dis, lib/filepat.dis, lib/arg.dis, lib/string.dis, sh.dis, emuinit.dis。
6. 実行
jslinuxを立ち上げて(ブラウザでindex.htmlを開く)、
emu-g -r /root/inferno を実行すると・・・
うーん、動かず。
どうやらFPinit()でだめになるっぽいです。
そもそもCPUエミュレーターはFPUには対応していないようで、
inferno emuはFPU必須なのかも。
起動の流れが追えて勉強になりましたが、動かなかったのは残念。
ちなみに、emu-gのサイズは291kbyte、disは合わせて58kbyte。
共有ライブラリはでかいですが(全部で2Mbyteほど、ミニマムは不明)、
結構小さいですね。
私の技量ではここまで。
Native infernoをやるのはおそらく無理かと。
動けば、ブラウザ上でinfernoができてすごくいいんですけどね。
IEのプラグインはあるようですが、他のブラウザではまだなので、動くと良いのですが。
なんと、ウェブブラウザのJavascriptで386のエミュレーションをし、
その上でlinuxが動くというのです。
http://bellard.org/jslinux/
素晴らしいです。
さて、新しい環境が出てきたら、そこでinfernoが動くのか考察するのが礼儀です。
この環境は386上のLinuxということで、普通にLinux上でビルドすると動くような気がしますね。
結論から言うと、FPUが原因で動かなかったのですが。
キャラクターコンソールオンリー、ディスクスペースが全部で最大4Mbyteなどの制限があり、
ミニマムなビルドにしないと動かなそうです。
・手順
1. ローカル環境、ディスクの用意
http://blog.livedoor.jp/dankogai/archives/51683749.html
を参考にローカル環境と4Mbyteのディスクを作ります。
cpux86.js, cpux86-ta.js, index.html, jslinux.js, linuxstart.bin, root.bin, term.js, vmlinux26.binがあれば動くようです。
2. mkconfig の編集
普通にセルフビルドする設定にしておく。
SYSHOST=Linux, OBJTYPE=386。
3. ミニマムなビルドのためにいらないものを削る
emu/Linux/emu-gを編集。
dev: env, prof, dup, ssl, cap, indir, ip, eia, mem
mod: math, srv, keyring, crypt, ipints, loader
あたりをコメントアウト。
4. ビルド、strip
mk CONF=emu-g install
こうすると、GUIを持たないemu-gというプログラムが出来る。
strip emu-g でダイエットしておく。
5. 必要なファイルをディスクイメージにコピー
作ったemu-g、必要なライブラリ、必要なdisをコピーしておく。
emu-gは/binに、ライブラリは/libに、disは/root/inferno/dis/においた。
ライブラリはldd emu-gで表示されるライブラリをコピー(ホストのlinuxのものをコピー)。
libpthread.so.0も元々あるやつだとダメっぽいのでこれもコピー。
必要なdis は
lib/bufio.dis, lib/filepat.dis, lib/arg.dis, lib/string.dis, sh.dis, emuinit.dis。
6. 実行
jslinuxを立ち上げて(ブラウザでindex.htmlを開く)、
emu-g -r /root/inferno を実行すると・・・
うーん、動かず。
どうやらFPinit()でだめになるっぽいです。
そもそもCPUエミュレーターはFPUには対応していないようで、
inferno emuはFPU必須なのかも。
起動の流れが追えて勉強になりましたが、動かなかったのは残念。
ちなみに、emu-gのサイズは291kbyte、disは合わせて58kbyte。
共有ライブラリはでかいですが(全部で2Mbyteほど、ミニマムは不明)、
結構小さいですね。
私の技量ではここまで。
Native infernoをやるのはおそらく無理かと。
動けば、ブラウザ上でinfernoができてすごくいいんですけどね。
IEのプラグインはあるようですが、他のブラウザではまだなので、動くと良いのですが。
2011年5月26日木曜日
Acmeを使い込んでみる
最近脱emacsを計り、Acme-sacを使っています。
ちょっとずつコツが掴めてきました。
なお、windowsでの使用を想定しています。
OSXでもそれっぽいことができるとは思いますが、まだ試してはいません。
落ちることがあるので注意
Zeroxというコマンドでウィンドウを二重化できますが、
それをしたあと、片方のウィンドウをいじるとAcmeが固まるようです。
カーソルキーをおして、ctrl-s とかctrl-gとかおすと出ます。
条件はまだはっきりとしないのですが、zeroxした時だけ出るようです。
メーリングリストにはまだ報告していません。
なお、落ちたときに$home/acme.dumpというダンプファイルができることに気づきました。
もしエラーがでたら前バッファのバックアップを残してくれるようです。
知らなかった。
Acmeでメールの現実解
Acme上でMailを使うのは厳しいです。日本語がだめなので。
現実解としては、Thunderbirdの外部エディタにAcmeを指定することですね。
特に文字化けもなく使えることは確認しました。
Thunderbirdにはexternal editorとかいうアドオンをいれて、
外部エディタとして後述のバッチファイルを指定すればOK。
まだメインのエディタとしてmewを使っていますが、ゆくゆくは完全に移行したい。
Acmeにエクスプローラーからファイルを送る
エクスプローラーでファイルをAcmeでオープンできるように頑張ってみました。
やり方は、
・AcmeでWinのパス名をInferno上のパス名に変更するプログラムを作成
・Acme起動時にrstyxサーバーを立てる
・Acmeに対しrstyxでコマンドを送るバッチファイルを作成(emuをコールする)。
といった感じです。
無駄にHosted Infernoを使っています。
rstyxがいい感じです。
こうすると、メーラーから外部エディタとしてAcmeが使えたり、
バッチファイルのショートカットをデスクトップに置いておいて、そこにドラッグアンドドロップでファイルがAcmeで開けるようになったり、コンテキストメニューの「送る」に登録してみたり、といろいろできます。
残念ながら開いているAcmeへのドラッグアンドドロップは無理ですが。
やり方の説明は面倒なので、subversionのリポジトリをお知らせします。
http://www.assembla.com/code/yosinori_public/subversion/nodes/trunk/limbo/cmd/openwithacme
index.txt に説明があります。
Goog、Pediaを日本語対応に
Goog word、Pedia word、で単語のグーグル検索、Wikipedia検索が出来ます。
が、日本語に対応していないので、日本語対応をしてみました。
urlencodeというプログラムを作成し、それを挟むことで
日本語がコード変換されて、情報のgetが可能になります。
なお、プログラム名はurlencodeという大層な名前ですが、
ちゃんとはしておらず、ただ渡された文字列を%xx という形に書き出すだけです。
http://www.assembla.com/code/yosinori_public/subversion/nodes/trunk/limbo/cmd/urlencode.b
においておきます。
Acmeでテキストブラウズなかなかいい感じ。
矩形切り取り
バッファで矩形に切り取りたい箇所を選択し、rect を実行。簡単。
残念ながら、貼付けはできないっぽい。
固定幅フォント
Fontを実行するとそのバッファが固定幅・プロポーショナルが切り替わります。
Fontにフォントパスを引数として付けると、フォントの切り替えも可能です。
いっぱいバッファを開くとSortが便利
次々バッファを開くと訳が分からなくなりますが、
Sortを実行するとバッファがファイル名で並ぶので、
ソートされたバッファリストとして使えます。
ちょっとずつコツが掴めてきました。
なお、windowsでの使用を想定しています。
OSXでもそれっぽいことができるとは思いますが、まだ試してはいません。
落ちることがあるので注意
Zeroxというコマンドでウィンドウを二重化できますが、
それをしたあと、片方のウィンドウをいじるとAcmeが固まるようです。
カーソルキーをおして、ctrl-s とかctrl-gとかおすと出ます。
条件はまだはっきりとしないのですが、zeroxした時だけ出るようです。
メーリングリストにはまだ報告していません。
なお、落ちたときに$home/acme.dumpというダンプファイルができることに気づきました。
もしエラーがでたら前バッファのバックアップを残してくれるようです。
知らなかった。
Acmeでメールの現実解
Acme上でMailを使うのは厳しいです。日本語がだめなので。
現実解としては、Thunderbirdの外部エディタにAcmeを指定することですね。
特に文字化けもなく使えることは確認しました。
Thunderbirdにはexternal editorとかいうアドオンをいれて、
外部エディタとして後述のバッチファイルを指定すればOK。
まだメインのエディタとしてmewを使っていますが、ゆくゆくは完全に移行したい。
Acmeにエクスプローラーからファイルを送る
エクスプローラーでファイルをAcmeでオープンできるように頑張ってみました。
やり方は、
・AcmeでWinのパス名をInferno上のパス名に変更するプログラムを作成
・Acme起動時にrstyxサーバーを立てる
・Acmeに対しrstyxでコマンドを送るバッチファイルを作成(emuをコールする)。
といった感じです。
無駄にHosted Infernoを使っています。
rstyxがいい感じです。
こうすると、メーラーから外部エディタとしてAcmeが使えたり、
バッチファイルのショートカットをデスクトップに置いておいて、そこにドラッグアンドドロップでファイルがAcmeで開けるようになったり、コンテキストメニューの「送る」に登録してみたり、といろいろできます。
残念ながら開いているAcmeへのドラッグアンドドロップは無理ですが。
やり方の説明は面倒なので、subversionのリポジトリをお知らせします。
http://www.assembla.com/code/yosinori_public/subversion/nodes/trunk/limbo/cmd/openwithacme
index.txt に説明があります。
Goog、Pediaを日本語対応に
Goog word、Pedia word、で単語のグーグル検索、Wikipedia検索が出来ます。
が、日本語に対応していないので、日本語対応をしてみました。
urlencodeというプログラムを作成し、それを挟むことで
日本語がコード変換されて、情報のgetが可能になります。
なお、プログラム名はurlencodeという大層な名前ですが、
ちゃんとはしておらず、ただ渡された文字列を%xx という形に書き出すだけです。
http://www.assembla.com/code/yosinori_public/subversion/nodes/trunk/limbo/cmd/urlencode.b
においておきます。
Acmeでテキストブラウズなかなかいい感じ。
矩形切り取り
バッファで矩形に切り取りたい箇所を選択し、rect を実行。簡単。
残念ながら、貼付けはできないっぽい。
固定幅フォント
Fontを実行するとそのバッファが固定幅・プロポーショナルが切り替わります。
Fontにフォントパスを引数として付けると、フォントの切り替えも可能です。
いっぱいバッファを開くとSortが便利
次々バッファを開くと訳が分からなくなりますが、
Sortを実行するとバッファがファイル名で並ぶので、
ソートされたバッファリストとして使えます。
登録:
投稿 (Atom)