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

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


2004-03-07 (Sun)

[Writing] GCC プログラミング工房 Linux カーネル 2.6 編・第3回

この週末は UNIX USER 5月号の原稿をしこしこと準備。当初は、Linux カーネル起動時のルートデバイス・マウントについて、解説する予定だったのだけれど、「カーネルヘッダー問題」を抜きにしては、肝心のカーネルがビルドできません・・。ということで、急遽変更。

Cプリプロセッサ(cpp)は、gcc ドライバーにより最初に起動されるコマンドだが、その詳細はあまり知られていない。一般的なアプリケーションをビルドする場合は、cpp の介在など気にすることなく、バカチョン式の gcc ドライバーを利用すれば、コマンド一発で目的の実行ファイルが出来上がる。

しかし、組み込み系のスタンドアローンプログラムの作成や、glibc を使わず自作ライブラリーでビルドを行う場合などには、この全自動運転が仇となり、システムプログラマーは途方に暮れることが多い。

  • 標準ヘッダーファイルとは何なの?
  • デフォルトのヘッダー探索パスは一体誰が決めているの?
  • -nostdinc, -I, -I-, -include って、どういう意味よ?
  • デフォルトのマクロ定義って誰がどこで決めたの?

真剣に考えると、このように次から次へと難問が頭に浮かぶ。しかし、毎度のことながら、その答えは世の中に用意されてはいないのである。

「わしゃ、もう知らん!」で済めば良いのだが、可能な限り曖昧性の残らない記事を書くためには、そうも言っておられない。「なぜ、Linux カーネル 2.6 では、カーネルヘッダーの取り扱いが変化したのか?」、この問いに答えるためには、Makefile だけでなく、Cプリプロセッサの内部構造にまで踏み込む必要がある。

とは言うものの、GCC ソースツリーは一個人が挑戦するには、あまりにも巨大である。「何か、取っ掛かりとなる資料はないもんかいな?」と探し回っていると、ソースツリー内部で Neil Booth 氏による "Cpplib Internals" という文書を見つけた(gcc-3.3.2/gcc/doc/cppinternals.texi)。そのイントロで曰く、

The GNU C preprocessor in GCC 3.x has been completely rewritten.
It is now implemented as a library, cpplib, so it can be easily shared between
a stand-alone preprocessor, and a preprocessor integrated with the C, C++
and Objective-C front ends.

ぬわぁんと、GCC 3.x において、プリプロセス機能は「ライブラリー」として実装されたらしい。知らんかった・・。興味のある方は、PDF 化した同ファイルを cppinternals.pdf として用意したので、ご参照あれ。ついでに、3.3.2 版 cpp.pdf もどうぞ。

ただし、この文書もあくまでも導線に過ぎず、詳細については一連のソースに当たるしかない。ということで、Sunday hacking は続く・・。

[Hard] シリアル・イーサネット変換アダプターが欲しい!

最近、Linux カーネルの起動ログを取る機会が多いのだけれど、これまではわざわざクロスケーブルを接続し、RS-232C 経由で採取していた。

しかしである。兎小屋日本の机上は狭い。執筆作業用の Powerbook G4, x86 ホストとしての Mebius note, これに加えてターゲットマシンを勢揃いさせると、とんでもないことになる。ということで、「シリアル・イーサネット変換アダプターが欲しい病」が発病。

この手の商品は昔から結構存在するが、比較的高価であるのと、そのほとんどが SSH に対応していないので、即却下。ついでに、リセットもリモートでかけたいよねぇ・・、ということは GPIO (General Purpose I/O)も必要だ。こうなると、やはり昨年あたりから世の中を賑わせている XPort もしくは Digi Connect ME かしらん?

両者の見た目はよく似ており、広告でも同レベルの製品として紹介されていることが多い。値段も単体で両者共に 6400 円に設定されているようである(若松通商 e マートでの XPort および Digi Connect ME を参照されたい)。ところがどっこい、その中身に「月とすっぽん」ほどの違いがあることは、あまり知られていない。

XPort

既に、いくつかの国内雑誌でも紹介された LANTRONIX 社の XPort であるが、CPU は 48MHz DSTni-LX、搭載メモリーは 256KB SRAM & 512Kb Flash となっている。

DSTni-LX とは聞き慣れない名称だが、これは 80186 base の CPU である。

これで 6400 円という値段は、組み込みボードとして考えれば決して高くはないだろう。しかし、おじさんはこのスペックでは「萌えない」のである。この歳で、セグメントの悪夢は御免被りたい。

Digi Connect ME

こちらは Digi 社の製品。心臓部には NetSilicon 社の NS7520 を採用しており、そのコンパクトな筐体にもかかわらず、ARM7TDMI ボードとして捉えることができる。メモリー環境は、8MB SDRAM, 2MB Flash と、潤沢。加えて、5本の GPIO ポートが用意されている(詳細はこちら)。

XPort を IBM PC/XT とすれば、Digi Connect ME は、さしずめ PC/AT と言ったところか。MS-DOS と Windows 98 位の違いがあるにもかかわらず、同レベルで売買されるとは、これいかに?

日本ではいくつかの代理店があるが、昌新のページが優れている。それにしても、ネットシリコン ジャパンよりも、代理店のコンテンツが充実しているとは、どういうことよ?

Armadillo-J

Digi Connect ME は express logic 社の ThreadX RTOS 上で稼働している。ThreadX は picokernel というアーキテクチャを採用しており、そのフットプリントはなんと 2.5KB 前後らしい。ThreadX にも思わず食指が動きそうになるが、残念ながら商用なのでパス。

ということで、ARM7TDMI と来れば、uClinux しかないのだが、Digi 社自身はこのような戦略を持っていない。しかし、幸い我が日本に Digi Connect ME に uClinux をポートし販売している会社が存在する。

Atmark Techno は、国内でまだ ARM が注目されていない時期から Armadillo を発表し、日本における ARM 組み込みボードの先駆者として名を馳せた会社である。

同社が今年の1月から発売開始した Armadillo-J は、Digi Connect ME をベースにしたコンパクトなボックスに、uClinux 2.4 を実装したものだ。値段が2万円というのは、Digi Connect ME の販売価格が 6400円であることを考えると、ちと高い気もするが、手軽に組み込み Linux を楽しむためにはこれぐらいの投資が必要・・ということか。

それにしても世界における ARM の台頭は凄まじい。これに対して、国内では H8 が花盛りの模様。一日本人として国内メーカーの活躍を期待しない訳ではないが、この温度差はいささか気になる。

SUZAKU

蛇足ながら、Atmark Techno が現在開発中の SUZAKU も面白い。Xilinx Spartan 上に構築した MicroBlaze CPU core に、uClinux を実装するらしい。世界的に見てもユニークな製品であり、しばらく同社の動向から目が離せそうにない。このような独創性を持った会社には、是非とも成長して頂きたいので、Armadillo-J をポチッとね。果たして、Atmark Techno 社のドキュメント作成能力は、どれ位のレベルにあるのか?興味深いところだ。

Intel PXA255

値段と性能のバランスの良さで、世界を席巻しつつある ARM7TDMI だが、世の中にはもっと凄いものが存在する。XScale core の Intel PXA255 はそのひとつ(XScale も ARM の血筋を引く)。

シリアルサーバーごときであれば、uClinux で十分だが、Full set Linux が必要となる場面では、PXA255 は良い選択肢となるだろう。もちろん MMU 搭載であり、値段も reasonable、そのスペックを見るとあまりの高機能さに思わず目が回りそうだ。

最近、PXA255 ボードを海外から2種類ほど仕入れたので、近々ご紹介することにしよう。