カーネルおよびモジュールのコンパイル方法 †Last modified: 2005-02-20 (日) 02:47:19
アーカイブの展開 †単なる tar + gzip ですので、ふつーに展開してください。 $ tar xfz linux-2.4.17_mvl21-sandpoint_XXXXXX.tar.gz $ ls linux-2.4.17_mvl21-sandpoint 以下の説明では、上記で展開されたディレクトリ linux-2.4.17_mvl21-sandpoint を ${TOPDIR} として表記します。展開された環境に合わせて適宜読み替えてください。 Cross or self compile †カーネルを LinkStation 上でコンパイルする(Self Compile) か、他の Linux PC 上でコンパイルする (Cross Compile)かを決めます。皆さんがお使いの x86 系 Linux PC であればほとんどの場合、クロスコンパイルのほうが早くコンパイルできると思います。 Self compile †LinkStation にコンパイラ、make コマンド、binutils ツール、glibc 等のコンパイル環境がインストールされている必要があります。 こちらでは現在、以下のパッケージを使用してコンパイルしています。コンパイル環境構築の参考にしてください。 binutils-2.11.90.0.8-8vl6 gcc-2.95.3-2vl22 gcc-cpp-2.95.3-2vl22 glibc-2.2.4-14vl15 glibc-common-2.2.4-14vl15 glibc-devel-2.2.4-14vl15 make-3.79.1-5vl1 なお make menuconfig を使用する場合は、ncurses パッケージが必要になります。インストールされていない場合はこれも入れておきましょう。 ncurses-5.2-16vl2 ncurses-devel-5.2-16vl2 セルフコンパイルを行う場合は、${TOPDIR} 配下の .hhl_cross_compile ファイルを削除(またはリネーム)してください。 $ rm ${TOPDIR}/.hhl_cross_compile
Cross compile †クロス環境でコンパイルする場合は、クロス開発用 Linux PC 上に通常のコンパイル環境がインストールされている必要があります。このほかに PowerPC 用のクロスコンパイラ、クロス用 binutil 等の環境構築が必要です。 クロスコンパイル環境ができていない場合は、以下のいずれかの方法で toolchain をインストールしてください。
${TOPDIR}/.hhl_cross_compile を変更して、インストールしたクロスコンパイラのプレフィックスを記述します。ここでプレフィックスといっているのは、クロス用のコマンド名につけられたターゲットシステムを示す文字列です。関連ツールのページで公開している toolchain では powerpc-linux- がプレフィックスになります。 デフォルトでは .hhl_cross_compile の内容は以下のようになっています。 ppc_82xx- これを以下のように書き換えます。 powerpc-linux- MontaVista Linux の preview release を使う場合は .hhl_cross_compile を変更する必要はありません。 コンパイル環境作成例 †関連ツールのページで公開している toolchain は以下の URL からダウンロードできるスクリプトを用いてコンパイルを行いました。これは "Embedded Linux: Hardware, Software and Interfacing" という書籍のサンプルプログラムのようですが、特に本を読まなくても難しいことはないようです。 "Embedded Linux: Hardware, Software and Interfacing" setsum のコンパイル †カーネルソースには新たにソースから起こした setsum ツールが含まれます。 2004.5.19 版までのソースではカーネルの make と連動してコンパイルされませんので、あらかじめ以下の手順でコンパイルしておく必要があります。 2004.6.30 版以降のソースでは、この手順を行う必要はありません。 $ cd ${TOPDIR}/arch/ppc/boot/utils/setsum
$ make
オリジナルの setsum を使用する場合は、以下の手順でコピーを行ってください。 $ cd ${TOPDIR}/arch/ppc/boot/utils/setsum
$ cp x86_binary/setsum .
Makefile の変更 †${TOPDIR}/Makefile を編集して、モジュールのインストール先ディレクトリ INSTALL_MOD_PATH をコンパイル環境に合わせて変更します。 INSTALL_MOD_PATH := /mnt/system/kernel MODLIB := $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) export MODLIB モジュールは MODLIB が示すディレクトリに格納されます。 カーネルのバージョン文字列 (Extra Version) を変更する場合は、同じく Makefile 内の EXTRAVERSION を変更します。 EXTRAVERSION = _mvl21-linkstation 初期状態の EXTRAVERSION は、${TOPDIR}/.hhl_target_lspname の内容を読み込み、"_mvl21-" の後に追加するようになっていますが、このファイルを変更しても関連するファイルが再コンパイルされないので、Makefile を書き換えることをお勧めします。 ちなみに、玄箱用カーネルモジュールを作成する場合は、以下の例のように玄箱のカーネルバージョンに合わせてください。 EXTRAVERSION = _kuro-box initrd イメージの準備 †initrd イメージは kernel 起動時のみに使用される ramdisk の内容を収めたものであり、initrd を含んだファームウェアのイメージファイル (firmimg.bin) を作成するのでなければ必要ありません。initrd を含まないカーネルのみのイメージ (kernimg.bin) でも起動することは可能なので、必ずしもこの手順を行う必要はありません。 initrd イメージを${TOPDIR}/arch/ppc/boot/images ディレクトリに ramdisk.image.gz という名前でおきます。initrd イメージは LinkStation の FLASH ROM 上のカーネル (/dev/fl1) から取り出すのが一番簡単です。 カーネルのコンフィグレーション †7月14日版以降のカーネルソースは arch/ppc/configs ディレクトリにコンフィグレーションファイルを置きましたので、make xxx_config でデフォルトのコンフィグレーションとして使用してください。 (HD-HLAN シリーズの場合) $ cd ${TOPDIR}
$ make hdhlan_config
$ make oldconfig
(玄箱の場合) $ cd ${TOPDIR}
$ make kurobox_config
$ make oldconfig
6月30日版以前のカーネルソースにはコンフィグレーションファイルは含まれません。別途ダウンロードページからコンパイルする環境に対応したコンフィグレーションファイルをダウンロードし、ディレクトリ ${TOPDIR} に .config という名前でコピーしてください。 $ cd ${TOPDIR}
$ cp <ダウンロード先ディレクトリ>/config.XXXXXX .config
$ make oldconfig
上記の手順で、コンフィグレーションの初期設定は終わりました。この後、必要に応じてコンフィグレーションの変更を行い、オリジナルのカーネルを作成してください。 LinkStation/玄箱固有の設定 †LinkStation のモデル選択は、menuconfig から Platform support --> Buffalo LinkStation を選択し、直後に表示される LinkStation Versions で HLAN_or_KUROBOX または HGLAN_Series を選択してください。玄箱の場合は、HLAN_or_KUROBOX を選択した際に表示される KURO-BOX support のオプションも選択してください。 ※ 2004.6.30 版のソースより、ブートローダのみでなくカーネルソース全体について HLAN/HGLAN シリーズおよび玄箱に対応しています。 HGLAN シリーズの動作確認はひのさんからご報告いただきました。 firmimg.txt の準備 †${TOPDIR} 配下の firmimg.txt の内容は HLAN シリーズの内容になっていますので、変更が必要な場合はこのファイルを編集してください。7月14日版以降のカーネルソースでは、${TOPDIR} 配下に各機種ごとの firmimg.txt ファイルが用意されていますので、単にこれをコピーするだけでも OK です。 $ cp firmimg.txt.<機種名> firmimg.txt カーネルのコンパイル †以下のコマンドでコンパイルを行ってください。 $ cd ${TOPDIR}
$ make dep
$ make <ターゲット>
$ make modules
ターゲットには以下の指定ができます。
initrd イメージの準備で ramdisk.image.gz をコピーしていない場合は kernimg.bin もしくは zImage を指定してください。 モジュールのインストール †Makefile の変更で設定した INSTALL_MOD_PATH の下にカーネルモジュールをインストールします。 $ su Password: # make modules_install (↑ 2005.2.20 スペルミスがあったので修正しました。) ブートローダの入れ替え †※ ブートローダの入れ替えは大変危険が伴います。フラッシュ書き込みの失敗、コンパイルの失敗、ブートローダ自身のバグ等により LinkStation が最悪起動不能になる可能性があります。 ブートローダファイル (arch/ppc/boot/images/bootcode.bin) を以下のコマンドでフラッシュ ROM に書き込みます。 $ su Password: # dd if=bootcode.bin of=/dev/fl2 # sync 正常に書き込みが行われたかどうかを必ず確認してください。いろいろな方法があると思いますが、書き込んだバイト数のみを cmp コマンドで比較する例を以下に示します。 (最初に bootcode.bin のファイルサイズを確認する) # ls -l bootcode.bin -rwxr-xr-x 1 user hdusers 38228 May 19 09:16 bootcode.bin* (GNU diff の cmp の場合) # cmp bootcode.bin /dev/fl2 0-38228 (LinkStation デフォルトの cmp の場合) # cmp -n 38228 bootcode.bin /dev/fl2 "38228" の部分は ls コマンドで確認したブートローダのファイルサイズに置き換えてください。 カーネルの入れ替え †※ カーネルの入れ替えは大変危険です。書き込みの失敗、コンパイルの失敗、カーネル自身のバグ、コンフィグレーションのミス等により LinkStation が最悪起動不能になる可能性があります。 この手順を実施する前には必ず 2004.6.30 版以降のブートローダをインストールし、シリアルコンソールからのカーネル起動ができることを確認してから行ってください。 シリアルコンソールからのカーネル起動ができれば、以下の手順で FLASH 上のカーネルを破壊してしまった場合であっても Linux を起動することができます。 詳しい手順はここを参照してください。 カーネルのコンパイルで作成された ${TOPDIR}/arch/ppc/boot/images/firmimg.bin を以下のコマンドで書き込みます。 $ su
Password:
# dd if=${TOPDIR}/arch/ppc/boot/images/firmimg.bin of=/dev/fl1
# sync
ブートローダの入れ替えと同様に、必ず正常に書き換えが行われたかどうかの確認を行ってください。 これまでこの方法によるカーネルの書き換え実績はない、と警告していましたが、この方法でカーネルを書き換え、正常に動作することを確認しました。 |