~無限の可能性を持つソフトコアCPUの世界へようこそ~
はじめに
前回はソフトウェアの開発方法について解説しました。今回も東京計器工業株式会社の福島さんにご協力を頂き、アルテラ社提供のNios II 開発キットCyclone II エディション(2C35搭載)をターゲットにしたOS(Operating System)の実装事例を紹介します。
OS
パソコン上で動作するOSではWindowsやMAC OS、UNIX系のLinuxなどがありますが、多くの組込み機器でもOSが搭載されています。私自身は数年前まではOSを搭載する必要が無い程度の小規模な機器開発が中心だったため、OSの必要性について今ひとつピンと来ていませんでした。しかしシステムの規模が大きくなるにつれ、手作りのソフトウェアでは限界が見え、更にファイルシステムやネットワークに接続したいといった要望に対応するためにはOSの搭載が不可避になってきました。
OSの主な役割としては
・タスク/プロセスのスケジューリング
・メモリの管理
・ハードウェアの抽象化
などがあげられます。ここでは詳細について解説しませんが、OSを搭載することでソフトウェア設計者はアプリケーション開発に注力できます。また汎用OSにはそれに対応したミドルウェア(ファイルシステム、ネットワークプロトコル等)等、他で実績のあるパッケージソフトウェアも入手が可能になるというメリットもあります。
表1に主な組み込みOSを示します。組み込み機器向けのOSでは高速な割り込み応答時間を求められるリアルタイムOSが多く使われてきましたが、最近ではネットワーク搭載機器ではLinux系のOSが、またGUI が必要な機器ではアプリケーション開発の容易性からWindows系OSも使われるようになっています。
今回は、Linux系OSについて実装事例を解説していきます。
表1 主要な組み込みOS
OS |
リアル タイム性 |
汎用性拡張性 |
規模 |
コスト |
主な用途 |
μITRON |
◎ |
◎ |
小 |
○ |
制御、医療機器等 |
VxWorks |
◎ |
○ |
大 |
△ |
航空、宇宙、防衛分野 |
Linux |
△ |
◎ |
中 |
◎ |
ネットワーク機器等 |
Windows |
△ |
○ |
中 |
△ |
GUI付きの機器 |
μClinux (マイクロシーリナックス)とは
μClinux は、Embedded Linux / MicrocontrollerProject(http://www.uclinux.org/)によって、米国Motorola 社(現在は米国Freescale Semiconductor 社)のDragon Ball(MC68328)を搭載するPDA「PalmPilot」向けに開発されたものです。
μClinux の構造を図 1に示します。Linux は仮想メモリを使うことが前提になっているため、MMU(Memory Management Unit)を持たないプロセッサでは動作させられませんでした。この仮想メモリを物理ページ管理に変更して、MMU を持たないプロセッサでも動作できるようにしたものがμClinux です。こう説明するとμClinuxをMMUなし専用のOS思われるかもしれませんが、その様なことはありません。更にカーネルバージョン2.6以降からはMMU搭載CPU向けにMMUの使用有無を設定できるようになっています。
つまりμClinuxはMMU有無とは無関係に移植できる数少ないLinux系OSなのです。

図1 μClinuxの構造
Nios II 対応のμClinux
実はNios IIに対応しているμClinuxディストリビューションには2種類あります。
Microtronix社が提供しているもの
アルテラ社が提供しているNios II IDEへプラグインして使用するもので、Nios IIに特化した形で扱いやすくなっています。しかし開発を1社で行っているためかバージョンアップへの対応がゆっくりで、現時点でも対応バージョンがv.7.0(OSを実装した当時はv.5.0でした)となっています。また標準ライブラリにはNewlibを採用しています。
uClinux.org(http://www.uclinux.org)が提供しているもの
Nios II IDEにはプラグインできませんが、フルソースディストリビューションとなっており、他のLinuxと同様の手順で開発が可能です。またNios II 専用ではないので、他のCPUへも展開が可能です。標準ライブラリには組み込み用を意識してコンパクトになる様に設計されたuClibcを採用しています。
それぞれに特徴はありますが、他CPUでの利用も念頭にしていたので、今回は後者のディストリビューション(uClinux-dist-20070130.tar.gz)を使用しました(以下、uClinux-distと表記)。尚、Nios IIへ適用するにはNios Community Wiki(http://nioswiki.jot.com/WikiHome)で提供しているNios II 用のパッチ(uClinux-dist-20070130-nios2-02.diff.gz)を適用する必要があります。