えーとH8への移植作業だけど,移植準備としてFreeBSDでの開発環境を構築して,とりあえずサンプルプログラム(hello world)をビルドして動作が確認できた.あっさり動いてちょっと不気味.

クロス開発環境はすべてFreeBSDで構築できた.

ターゲット:AKI-H8/3069Fネット対応マイコンLANボード(秋月電子)
アセンブラ,コンパイラなど:FreeBSD上でbinutils, gccをクロスビルドして利用
フラッシュROM書き換え:h8writeをFreeBSD用に数行修正し,ビルドして利用

ちなみにh8writeの修正だけど,ソース(h8write.c)の先頭で#define FreeBSDのように修正して,あと利用するデバイスを/dev/cuaa0から/dev/cuad0にするだけ(FreeBSD-6.xの場合の修正.FreeBSD-4.xの場合は/dev/cuaa0のままでよい).

これで完全にWindowsに頼らずに開発ができます.これってすげー大事なことだと思うんだけど,そんなんのって僕だけ?

まあWindowsはともかくとしても,開発環境を開発者が好きに選べるというのはすげー大切だと思う.Windows上で統合開発環境使いたいひともいれば,UNIX上でemacsやmakeを使いたいひともいるわけだし.

あと,実はボード付属のCD-ROMに「H8/OS」というOSが付属していて,プログラムをメモリ上にロードして実行する機能を持っている.さらにputというコマンドがCD-ROMに付属していて,ソースも添付でFreeBSDへの移植は簡単そう.(h8writeと同様に,先頭にFreeBSD用の#defineがある)

ということでH8/OSをフラッシュに焼けばブートローダーとして使えて,putでKOZOSを送って実行する,ということができそうなので,ブートローダーの自作は必ずしも必須ではなさそうだ.(まあでもネタとして面白いので,ブートローダー自作しようかとは思ってはいるが)

あと秋月のボードのいいところだけど,自作OSを作るターゲットとしては,以下がいいなあと思った.

■ フラッシュROM書き換え回路を持っているので,フラッシュをとばしても個人レベルで書き換えが可能

通常はフラッシュ書き換えのプログラム(モニタ)をフラッシュ上に持っているのが普通だと思うのだが,それだとフラッシュとばしたり,へんなものを焼いてしまうと書き換え不能になるので,恐くて現実的には結局書き換えられんのよ.とばしたらICE使うしか手段が無くなったりするし.(ROMライタがあればだいぶマシだけど)

なので(ブートローダーのような)フラッシュROM上で動作するプログラムを個人レベルで書こうとしたら,このような機能はすげー重宝される.ICEなんて個人レベルではとてもとても買えないしねえ(これを仕事にしているプロなら別だけど,ホビープログラミングという遊びのために,このためだけにはとても買えない).まあもっともはじめから高級なモニタが乗ってたら,そもそも今回みたいにブートローダーから作ろうなんてことにはならないのだけど...

■ キットと完成品の両方の形態で販売

まあお金を節約したいならばキットなのだけど,数千円の違いならば,時間の貴重な社会人は完成品の形で買ってすぐに使いたいという人も多いだろう.半田づけとかあまりやりたくないだろうし(ぼくがそう).

こーいうこというと「自分が開発するボードを半田づけからきちんと自分でするのが基本では?」とかいうひとがいそうだけど(実際,言われたことがある),ぼくのやりたいのはOS開発であって回路づくりではないのよ.まあ学生さんとかならば時間もあるだろうし,半田づけからやってもいいとは思うけどね.

なのでこのボードのように,組み立て済みで売っていてくれるのはとてもありがたい.まあそれがこのボードの選択理由のひとつなのだけど.(KOZOSをみんなにいじってもらうということを考えると,いまさら半田づけなんてめんどくさいという人も多いだろうから,これってけっこう大事なことだと思う)


名古屋でちょっと疲れたので,今日は会社を休んでいる.で,H8への移植準備を進めている.

まずはクロス開発環境だけど,FreeBSD上で全部できそうだ.フラッシュへの書き込みツールに
h8writeというのがあるのだけど,これもFreeBSDで動くみたい.

とりあえずクロスコンパイラとh8writeのビルドはできた.サンプルプログラムのビルドにもあっさり成功.あとはいよいよ動かしてみるか.

(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

8/22(土)に名古屋市立大学で開催された,オープンソースカンファレンス2009 Nagoyaに出展してきました.今回も単独ブースでの出展です.

前回の京都では,専門学校のロビーでやっていたのでそれなりに広々していてとなりのブースとくらいしかお話しできなかったのだけど,今回は大学の教室でやったので,いい意味での閉鎖空間というか,わりととなりどうしで和気あいあい,という感じで楽しかったです.(あと会社の同期もいたし)

ブースは会場に入ったらなんと日本 OpenSolaris ユーザーグループと日本Androidの会という強力な2つにおもいっきりはさまれていて,KOZOSなんていうよくわからんものが間にポツンとあるような感じであちゃーやべーなーと思ったのだけど,まあいろいろ話せてよかった.前回説明を聞いていただいたCSnagoyaの展示がちょうど目の前だったと,あと隣の日本Androidの会の人といろいろ話をしたのだけど,いやーためになるねえ.いろんなひとと話をするのはいいもんだ.(CSnagoyaは相変わらず面白い勉強会やってるなあ,と思った)

前回のように,会場に足を運んでくれた人にKOZOSをひとりひとり紹介して説明していくのもいいけど,今回みたいに隣どうしでいろいろお話しして情報交換するのもいいもんです.(なので今回はあまり説明していなかったかも)

あとg新部さんの講演があって,ちょっと昔に若手技術者勉強会みたいなので(当時は私も若手だったのです)お世話になったので講演を聞いたのだけど,うーんすごいねえ.いや,こういうすごいひともいるもんだと刺激になるねえ.遊んでる場合じゃないですな.(とかいいつつ,名古屋の帰りはドライブがてら丹沢で遊んできたのだけど.当り前だけどファミリーキャンプ客が多かった)

で,KOZOSなのだけど,前回もちょっと書いたけど,もともとはユーザランドOSとしてリアルタイム性とか考えていきたかったのだけど,現在H8ボードへの移植を進めている.というのは,リアルタイム性についてはμiTRONとかですでに考えられているので,後発のOSとしてはいまさら追求しても面白味が無いからだ.(単なる僕の勉強と,勉強した内容を紹介するだけのつまらんものになってしまう)

あと,僕自身,リアルタイム性がどうあるべきか考えがかなりいきづまってしまっていて,ほんとにやるのならこれ以上はやっぱし専門家にある程度は教わらないと,僕のようなよくわからんどこぞの誰かがひとりで考えていてもあまり進展はないかなあ,という理由もある.

ということでリアルタイム性とかの難しい話はおいといて,安価なプラットホームに移植を進めて,組み込みOSの勉強をしたい人が,低い敷居でパッと試せるようなものにしていきたいなあ,と今は思っている.「KOZOSのウリ」ってやつですね.

パッと試せるためにはターゲットボードが安いだけではダメで,スタートアップガイドみたいな「とりあえずこうすれば動きます」的なドキュメントが整備されていることが大切だ.なのでどうすればとりあえず試せるのかって情報をもっと流していきたい.

あと開発環境は特定のものにしばられないことも大切.まあ僕のように何が何でもFreeBSD上で開発したいって人は稀だとは思うけど,メーカとかが配布している特定の(概ね,Windows用の)コンパイラを使うというのではダメだ.ということで「binutilsとgccを自分でクロスビルドして使う」というのは,僕的には必須だ.

最近はtoolchainが進化して,ビルド済みのクロスコンパイラとかが一式そろっていて,インストールするだけということも多いけど,やはり組み込みやるならば,まずはbinutilsとgccをクロスビルドするところからやらないと,という思いもある.(ビルド済みのtoolchainを否定するわけではないのだけど,全員がWindowsやLinuxを必ず使っているわけではないので,それとは別にソース形態での配布もしてほしいなあ,と思うことは多々ある)

まあでも初心者の場合には,むしろ特定の開発環境にしばってしまって,「この環境で開発しろ!」と言ってあげたほうがとっつきやすいのかもしれないけど.人によりけりだとは思うけどね.

で,H8への移植なのだけど,現在ブートローダーを作成中です.

というのはほんとはRedBootをあてにしていたのだけど,RedBootがC++で書いてあって,C++のクロスコンパイラ(g++)がうまくビルドできなかったから.どうもライブラリがらみでビルドエラーになっているらしく,newlib入れたりとかいろいろ試してみたのだけどダメで,ていうかこの様子だと,ぼくの環境で頑張ってg++をビルドできたとしても,ユーザの個々の環境できちんとビルドできるかとっても不安なので,いっそブートローダーも自作してしまおうと判断.ブートローダーも自前で用意すれば融通も効くし,それはそれでウリになるし.

まあ組み込みOS作るなら,ブートローダーくらい自作しないとねえ,って思いもある.ブートローダーも作ってしまえば,ほんとの意味で「最初から全部作ってます」って言えるし.

今回も思ったことだけど,組み込みOSって,興味のある人はけっこういると思う.作ってみたいという人もけっこういる.しかしたいていの場合,作ってみたいけどいったい何をすれば作れるのか,何を勉強すれば作れるようになるのかわからない,ということがほとんどだと思う.

KOZOSがそーいうためのサンプルというか雛型になれるようになればなあ,と思う.

実際,組み込みOSを自分で作ろうとするといろんな知識が必要だ.コンピュータのスタートアップの知識,CPUの知識,デバイス操作の知識,割り込み,リンカスクリプト,アセンブラの読み書き,ELF形式,クロス開発環境,スタックとかのメモリまわり,テキスト領域とかデータ領域とかBSSとか,スレッドプログラミングなど,思いつくだけでもいっぱいある.教科書が無いような分野もいっぱいある.

まあ極端に言ってしまうと,これらの知識がひとつでも欠けていたら,OSはひとりでは作れない(別の言いかたをすると,グループでやるなら誰かひとりが知っていればいいし,知らないならできあいのものをどっかから持ってきてもいいし,OS自作するとこれらの知識がすべて身についてとってもお得).しかしそれらの情報が一箇所にまとまっている場所は無い.このへんの現状をなんとかしていきたいなあ,と思う.

最近は暑くて、飲む酒はサワーにすることが多い。


まあビールだと尿酸値とかが気になるなあってのもあるのだけど、グラスにロックアイスを大量に入れて飲むサワーってうまいよね。暑い夏の夜はこれがたまらなくうまい。


で、飲むサワーなのだけど、なるべくならレモンサワーとかグレープフルーツとかの、カロリーの低そうなものにしたい。でもレモンサワーとかってのは、安い甲類焼酎の味がもろに感じられてちょっとうまくないときがある。これが悩みどころだ。(とくにアルコール度数高めでドライをうたっているようなやつが、そういうときが多い)


やっぱし焼酎のうまいまずいは値段に比例するというか、安物の甲類はぼくはちょっと苦手なのだけど、そーいう安い焼酎の味がちょっとしてしまうのだな。値段ちょっと高めでもいいから、もうちょっといい焼酎使ったサワーとか出してくれないかなあ、と思う。


自分でそこそこの値段の焼酎買って作ればいいのかなあと思ってやってみたのだけどこれもなんかイマイチなんだよね。なぜなのかはわからんけど。


ピーチとかグレープとかの、果物系のサワーだとあまり感じないので、そういったサワーを飲むこともあるのだけど、最近、いい方法を発見した。それは、ワインで割るというものだ。


グラスにロックアイスを山盛りにしてサワーを注いだ後、1センチくらい赤ワインを注ぎ足す、という飲み方だ。まあワイン好きの人に言わせれば邪道かもしれないのだけど、いい感じでワインの香りがついて、甲類焼酎のいやなにおいも消えておいしいです。おすすめ。サワーはなんでもいいので、カロリー低めのレモンサワーとかがいいでしょう。


ワインはスーパーで売ってるやっすいやつで十分。じつはぼくは安赤ワインも苦手なのだけど(甘ったるかったり、渋みとかがまったく無く単調にすっぱいだけだったりするから。ちなみに赤ワインは大好き)、これに使うと安赤ワインでもおいしく飲めて一石二鳥。おすすめです。だれもやらんと思うけど。



世の中にはすげえとおもう技術者はいっぱいいて、OSCとか参加すると、それはまたすごいひとにいっぱい出会うもんだ。自分は井の中の蛙だなあ、とつくづく感じさせられる。


で、僕がこの人はほんとすげーなーとおもうのは、まずはリチャードストールマンかなあ。ぼくはGNUの信奉者というわけではないが、ストールマンは業績もすごいけど、その信念というか納得いかなかったらとことんまでっていう反骨精神というかバイタリティがすごいよね。


あとはC言語の生みの親のカーニハンとリッチーとか、Linuxのリーナストーバルズとか、Perlのラリーウォールとかもすごいなあとおもう。日本だとRubyのまつもとゆきひろさんとか、TRONの坂村健大先生とかかなあ。なんにせよ、既存のものでは飽き足らずに自分で作っちまえという考えには刺激を受けるものがある。

このひとはすげえなあと思う人というのは、その技術力もすげえんだけどそれだけがすごいというだけではなく、なんつーか信念というか反骨精神というか、考え方がすごいよね。普通のひととは考え方が違うというか。。。そーいう部分に刺激を受けるもんだ。


アイディアも斬新ですごかったりするのだけど、すごいアイディアというのは単なるひらめきではなくて、実はそういった自分で作っちまえという基本的な信念から生まれるものが多いと思う。自分で作るという考えがふだんからあるからこそ、ふだんから物事を根本から考えるので、そういうすごいアイディアが出るのだと思う。アイディアというのは天才的なひらめきで一瞬にして出るものではなく(まあそういう天才も中にはいるだろうが)、普段から一生懸命考えているからこそ、生まれるものだと思う。


たとえば昔、料理の鉄人って番組があったじゃあないですか。いきなりお題を出されて1時間で料理を作るっていうやつ。あれですげえなあって思うのは、どんなお題を出されても、1時間できちんと作り上げることだ。これは、単なるひらめきとかで作っているのではなく、普段から様々な食材についていろいろ考えているからこそ、いざ1時間で作るってことになっても作ることができるんだとおもう。

そーいう部分がすごいのだ。そしてそれは、自分も見習うことができる部分だから、刺激を受けるのだ。(ひらめきが天才的というだけだったら、それは見習って真似することはできないけど、普段から「自分が作る」という考えで根本から考えている、という考え方は、見習って真似することができるので)


で、マジメな話はさておいて、この人もすげえなあとおもう技術者がいる。一番に思うのは、トチローだ。あの「キャプテンハーロック」のトチローです。


なんせ彼はあのでかいアルカディア号を一人で作ってしまっている。ひとりで、でだよ。戦艦を、だよ。


戦艦なんて、きっと国家規模の技術の集大成だろうから、彼は機械やコンピュータだけの知識じゃなく、ありとあらゆる工学技術を一人で持っているんだろうなあ。造船とか建築とかの技術もあるわけだ。それとは別に、溶接とか玉がけ(クレーンのフックに荷物をひっかける作業)とかといった現場の技術も持っていることになる。すげえよなあ。


あとすげえなあと思うのは、ドロンボーのボヤッキーだ。(まあ最近ヤッターマンが映画化されて流行りだしね)


彼のすごいところは、毎週毎週ロボットを作っているけど、前の週のものとはまったく違ったロボットを作ってくることだ。普通は前に作ったものを機能拡張したりコストダウンしたりして、改良して作るよね。しかし彼は、ぜんぜん違ったものを作ってくるのだ。きっと自分が前に作ったものには、もう興味がないんだろうなあ。これってすげえ天才肌だよなあ。技術者という視点から見ると、主人公のヤッターマンよりはるかにかっちょいい。


しかもそのロボットの製作資金は、毎週毎週なんか商売をしてもうけた金をあてているんだよね。


まあサギまがい、っていうかサギな商売なのだけど。でもそれでもロボット1体作るだけの資金を稼いでしまうんだから、ビジネスセンスもきちんとあるわけだ。ものづくりは得意なのだけどビジネス感覚に薄いという、多くの技術者にありがちな欠点を持っている僕としては、尊敬に値する部分だ。ロボット作るのやめれば一生食っていけるんじゃないの?とも思うのだけど、きっと技術者魂が作ることをやめさせないんだろうなあ。そういうプライドもあるわけだ。たぶん。


さらに毎週どくろべえにこっぴどくおしおきを受けてもまったくめげない根性。っていうかまったく気にしてないし。こういう「(いい意味で)あまり気にしない性格」って現場ではけっこう大切だったりするけれど、精神的な強さも持っているわけだ。こういう部分は見習わないといかん。


うーん、すげえひとはいっぱいいるなあって話でした。(ボヤッキーに刺激を受けてるってどうよ!とも思うが、それで頑張るならばそれはそれでよし)