トップ > 技術解説 > 小型組み込み機器向けLinux

小型組み込み機器向けLinux
──MMUを持たないマイクロプロセッサで動作するしくみ
 1 2 3 4 5 6 7 8 9 p



カーネルの構造

 ここでは,LinuxカーネルをMMUのないプロセッサ上で動作させるため,どのような変更が行われているかを説明します.


●アーキテクチャ共通のカーネル変更

 メモリ管理サブシステムは,CPUアーキテクチャに依存しません(図2).カーネル・ソフトウェアそのものに基本的なメモリ管理機能を与えることにより,MMUハードウェアに頼らずにすむようなしくみになっています.uClinuxの流儀で言えば,これは/mmディレクトリから引き出され,置き換えられる/mmnommuディレクトリの役割です.

〔図2〕uClinuxカーネルの構造



 サブシステムのいくつかについては,通常のLinuxカーネルからの変更,付加,削除,書き直しなどが必要でした.また,カーネルとユーザ・メモリの割り当て・開放ルーチンは再実装しています.透過的なスワッピング/ページングのサポートは除かれ,ポジション独立コード(PIC)をサポートするプログラム・ローダを付加しました.PICをサポートするコンパクトなヘッダを持つバイナリ・オブジェクト・コード用のフォーマットである“flat”が開発され,そのほかのバイナリ・フォーマットは固定メモリ・アドレス参照を使用しています.こうしたフォーマット用のプログラム・ローダは,ランタイム時に絶対アドレスを確定します.

 このような方法は,それぞれ長所と短所を合わせ持ちます.一般にPICは速くてコンパクトです.アーキテクチャによってはサイズが制限されます.例えば,Motorola社の68Kプロセッサにおける16ビット相対ジャンプは,32Kバイトに制限されています.ランタイム時に確定するテクニックを用いると,この制限はなくなりますが,プログラムがカーネルによってロードされる際にオーバヘッドを招いてしまいます.


●uClinuxの新規プラットホームへの移植

 新しいCPUに対してuClinuxを対応させる作業は,通常のLinuxで同様の作業を行うのに近いものとなります.

 Linuxには,わずかな変更のみでuClinuxに移植し再利用できるコードがたくさんあります.例えば,ARM,68K,MIPS,SPARCなどのMMUを持つプロセッサには,CPU固有のスタートアップ・コードとヘッダ・ファイルがすでに存在しています.このコードは,uClinuxにおいてMMUを持たないプロセッサをサポートする際に利用できます.Linuxのドライバ・コードは,多くの場合,uClinuxで動作するように書き換えることができます.

 こうした移植の際の課題としては,エンディアン問題や,MMUの存在を前提とするメモリ処理コードが挙げられます.



トップ > 技術解説 > 小型組み込み機器向けLinux

Copyright 2001 CQ Publishing Co.,Ltd.

Webmaster@kumikomi.net