/ «2003-12-04 (Thu) ^ 2003-12-31 (Wed)» ?
   西田 亙の本:GNU 開発ツール -- hello.c から a.out が誕生するまで --

Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール


2003-12-30 (Tue)

[Writing] 復帰

執筆

連載原稿と特集記事の執筆に追われること3週間。新しい年も物書きで迎えることになりそう・・。ともかく、峠は越したので久しぶりに本メモを再開。この間に貯まったネタをいくつか紹介。

Linux kernel 2.6

特集記事で用いるカーネルは当初 2.4 の予定だったのだが、2.6 のソースツリーを眺めたり、ビルドしている間にスッカリ 2.6 が気に入ってしまった。make の O オプションなど、「これこれ、これが欲しかったのよね〜〜!」という、カーネルフェチを喜ばせてくれる拡張が随所に施されている。特に驚かされるのは、ビルド工程の大幅な改良(kbuild)。Makefile を読む限り、新しいカーネル 2.6 は 2.4 とは全く別物だ。

しかし、例によって何が新しくなったのかは Documentation ディレクトリの拙い文書群を読む限り、詳細は分からない。2.6 の新しいパワーを享受するためには、Makefile とソースファイルを丹念に読み込んでいくしかないようだ。おかげで、私は新しいネタに事欠くことはないのだけれど、仕事で 2.6 に付き合わざるを得ない方々は、資料不足でさぞかし困っておられるのではなかろうか?

SYSLINUX

Linux カーネル 2.4 では、make bzImage で生成された arch/i386/boot/bzImage を dd if=bzImage of=/dev/fd0 でFDにベタ出力してやれば、そのまま起動ディスクとして利用することが出来た。しかし、カーネル 2.6 からはFD直接起動が出来ないようになっている。それではどうやってブートFDを作成するのか?

Knoppix で一躍メジャーになった SYSLINUX を使うのである。SYSLINUX は、MS-DOS の FAT ファイルシステム上に構築されるブートローダー。GRUB のような万能ツールではないが、機能と使用環境を絞り込むことで、非常に簡素な仕上がりになっている。プログラム本体は設定ファイルで指定されたカーネルファイル(bzImage 型式)を FAT ファイルシステム上から読み込み、プロテクトモードへ移行し、各種パラメーターをカーネルに伝達するだけ。ファイルシステムがシンプルな FAT16 であるため、プログラム全体は今時珍しいオールアセンブリ言語で記述されている。

学習用ブートローダー

私はかねてから、ブートローダーはOS構築の前段階に用いる学習テーマとして最適だと考えていた。が、SYSLINUX のオールアセンブリソースを読むのはちと辛い。「それなら、SYSLINUX 相当のプログラムを GCC で書き下ろしてみるのは、どうや?ファイルシステム学習の第一段階とも言える FAT もマスターできるで!」と、頭の中で誰かが囁く。

う〜〜ん、いいかもしんない。組み込み Linux で最初に躓くポイントは、カーネルの起動方法そしてブートローダーの選択だろう。多くの人達にとって、MBR (Master Boot Record)やブートローダーは「禁断の地」として映るようだが、中身は至ってシンプル。ブート環境を限定すれば、既製のブートローダーなどに頼らずとも、自作で十分実現可能なのだ。何より、自分がゼロから作り上げた環境下で、Linux がパワースイッチONと共に立ち上がる様は、なかなかの感動ものである。ついでに、MBR 中に収められた、パーティションテーブルの構造とその操作方法についても徹底解説できると良いねぇ。

[MCU] 6502, 6809

今月は、暇を見つけてはCPUの探索を行った。6502 については、セカンドソースも含めてかなりの数のデータシートを入手した。後ほど紹介する予定だが、この中に白眉とも言える資料を発見。プログラミングマニュアルだけでも200ページを越える大作であり、アセンブリ言語の教科書としてこれまで見てきた中で最高の出来だ。世の中にはこんな凄いお宝が眠っておったんかいな〜〜、と改めて自分の無知を恥じる。

6809 に関しては、BYTE 誌に掲載された論理設計者による連載記事が凄い。こちらも技術者達の設計哲学が書き綴られた歴史的逸品だ。最近は、FPGA による CPU 設計が花盛りになりつつあるが、私達は今一度、偉大な前人が残した歴史を学び直す必要があるように思う。それにしても、6809 の opcode table は惚れ惚れするほどに美しい・・。究極の8ビットCPU と呼ばれるだけのことはある。

[MCU] MSP430との邂逅

Motorola は 6809 の流れを汲むマイクロコントローラーとして M68HC11 シリーズ を販売しているし、GCC も同 CPU に対応しているため条件は揃っているのだが、安価で魅力的なボードが見つからない。

ということで、心は 6809 嬢に惹かれつつも、体は H8 嬢に傾きつつあった訳。しかし、体は正直なもので、H8 のデータシートを何度手にしても「萌えない」、もとい「燃えない」のである。おいらもとうとうEDですか・・ショボン、となりかけていた。

そんな折りに、先日久しぶりに OLIMEX のサイトを訪れた。同サイトの "Development boards and tools" に掲載されている MSP430 というタイトルに何となく目が止まる。恥ずかしながら、MSP430 については全く知らなかったので、これまでは通り過ぎていたのだが、この日ばかりは虫の知らせがあったのか、いつのまにか指が同リンクをクリックしていたのだった。現れたボードの中の MSP430-easyWeb2 に誘蛾灯のように引き寄せられ、その写真に思わず鼻血ブー。「なんじゃこりゃ〜〜!」

OLIMEX お得意の「遊び心」満載の開発ボードだ(秋月の開発キットには、惜しむらくはこの遊び心が欠けているような気がする)。スペックを見てみると、LAN は安価な CS8900 を使っているが、私を驚かせたのは "JTAG connector" という文字。

調べてみると、OLIMEX が販売しているその他の MSP430 ボードも全て、JTAG ポートを備えている。「一体、この MSP430 というマイクロコントローラーは何物なのだ?」と、懐かしのテキサスインスツルメンツ社のサイトを訪ねて、そのデータシートを読む。

これがまた「データシートたるもの、かくあるべし」という、素晴らしい出来で、Atmel 社に迫る内容だ。何より感銘を受けたのは、MSP430 のシンプルな設計にある。16本の16ビットレジスターに、たったの27種類の命令セットと7つのアドレッシングモード。アドレス空間は64KBだけ。つまり、16ビット版のRISCということらしい。

しかも JTAG で外部制御できる訳だから、学習用としては最高のマイクロコントローラーかもしれない。調べてみると、CDK4MSP (Cross Development Kit for the Texas Instruments MSP430 MCUs) という、GNU 開発ツールを母体とした、極めて強力な開発環境も存在している。

MSP430 は日本ではまだ殆ど注目されていないが、海外ではかなり名の通った実力機種の模様。今年の11月、日本TIは電力業界向けに自動検針機能を念頭に置いた MSP430FW427 のプレスリリースを発表していることから、日本においてもそろそろ認知度が高まり始めるのかもしれない。

ともかく、年が明けたら早速 OLIMEX に MSP430 ボードと JTAG ケーブルを注文だ。