ルートファイル・システムをカーネル2.4から2.6へ変更するための一般的なヒント

1.はじめに

カーネル2.6の安定化により、組み込みシステムでもカーネル2.6が頻繁に利用されるようになってきました。

ここでは、主に事前チェックの目安として従来のカーネル2.4用のルートファイルシステムをカーネル2.6対応させる場合に必要なポイントをまとめてみます。

2.module-init-toolsの導入

カーネル2.6では、ローダブル・モジュールの拡張子が従来の.oから.koに変わり、カーネル本体へのロード方法とインタフェイスも変わっています。そのためモジュールのロード用コマンド「module-init-tools:insmod, lsmod, depmodコマンド類」を入れ替える必要があります。

クロスコンパイル環境の場合は、module-init-toolsをクロスコンパイルします。セルフ・コンパイルならば、make moveoldで2.4と共用可能です。いずれにしても2.4と共用する場合には、注意が必要です。

★注意点としてカーネル2.6では、カーネルのバーションとコンフィグレーションが厳格にチェックされるようになりました。insmod -fで異なるバージョンのモジュールを強制ロードすることは一切できません。動作させる目的のカーネルが決まっていて、後からローダブル・モジュールを追加する場合には、そのカーネル用にローダブル・モジュールをビルドする必要があります。そのためにはカーネル・ヘッダ等のカーネル・モジュールのコンパイル環境が必要です。

参考情報: カーネル2.6のコンフィグレーション Living with Modules 新しいモジュール・フォーマット 新しいモジュール・フォーマット(その2)

3./etc/modules.conf → /etc/modprobe.conf

ローダブル・モジュールの初期ロードを管理する定義ファイルの変更です。ローダブル・モジュールの変更により、書式も少し代わりましたが、定義ファイルの名前を換えることで、2.4のローダブルモジュールのロード記述と、2.6のローダブルモジュールのロード記述が共存可能になっています。

4.Sysfsの導入

カーネル2.6では、/proc以下のprocfsの混乱を避けるためにデバイス、バス、デバイスドライバ、ホットプラグ、電源管理用にsysfs /sysを導入しています。これは必須です。カーネルロード時に/sysをマウントするように、修正が必要です。

手作業でマウントするならば、
#mount -t sysfs sysfs /sys

fstabにエントリを書くならば、
none /sys sysfs defaults 0 0

参考情報:driverfs/sysfs

5./proc以下のファイル

Sysfsの導入により、/proc以下から以下のファイルが無くなりました。rcで参照している場合には、書き換えが必要です。元々これらを参照するのは限られた用途ですが、共存される場合には、rcシェル内でバージョン判定のif文を書くなどして対応します。

2.6で無くなったファイル: /proc/ksyms, /proc/sys/kernel/real-root-dev, /proc/bus/usb/*

6.udevの導入

udevは/dev/以下のデバイスファイルを動的に管理する仕組みです。従来のスタティックな/dev/ファイルは継続してサポートされるので、無理してudevを導入する必要はないのですが、2.6.18以降の一般的なディストリビューションはudevが標準になっています。古いmontavistaが採用していたdevfsはサポートされないので、この際udevに書き換えるべきでしょう。

参考情報:udevとdevfs udevの概要 最近のudev事情

7.カーネルバージョン判定スクリプトの例(参考)

if [ `uname -r | sed 's/^2\.\([0-9]\).*/\1/'` -le 4 ] ; then
    echo kernel 2.4 or below
else
    echo kernel 2.5 or upper
fi

Last editted on 1/10/2008
Copyright(c) 2008, Device Drivers Limited 戻る→