Kernel_sourceへ戻る

カーネルおよびモジュールのコンパイル方法

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 をインストールしてください。

  • 関連ツールのページから toolchain をダウンロード/インストールする
  • MontaVista Linux の preview release をダウンロード/インストールする

${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

ターゲットには以下の指定ができます。

ターゲット名生成ファイル名内容
firmimg.binarch/ppc/boot/images/firmimg.binファームウェアイメージバイナリ(ヘッダ、カーネル本体、initrd イメージを含む)
firmimg.srecarch/ppc/boot/images/kernimg.bin
arch/ppc/boot/images/firmimg.srec
ファームウェアイメージ firmimg.bin を S-Record 形式に変換したもの
kernimg.binarch/ppc/boot/images/firmimg.binファームウェアイメージバイナリ(ヘッダ、カーネル本体を含む)
kernimg.srecarch/ppc/boot/images/kernimg.bin
arch/ppc/boot/images/firmimg.srec
ファームウェアイメージ kernimg.bin を S-Record 形式に変換したもの
bootcodearch/ppc/boot/images/bootcode.binブートローダバイナリ
zImagearch/ppc/boot/images/kernimg.bin
arch/ppc/boot/images/zImage
arch/ppc/boot/images/bootcode.bin
以前のリリースとの互換性を保つために用意
zImage.initrdarch/ppc/boot/images/firmimg.bin
arch/ppc/boot/images/zImage.initrd
arch/ppc/boot/images/bootcode.bin
以前のリリースとの互換性を保つために用意

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 コマンドで比較する例を以下に示します。
Vine 化等により GNU diff がインストールされている場合と LinkStation デフォルトの 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 コマンドで確認したブートローダのファイルサイズに置き換えてください。
どちらの cmp でも何もメッセージが表示されなければファイルの内容が同じ (書き込みが正常に行われた) ということになります。

カーネルの入れ替え

※ カーネルの入れ替えは大変危険です。書き込みの失敗、コンパイルの失敗、カーネル自身のバグ、コンフィグレーションのミス等により 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

ブートローダの入れ替えと同様に、必ず正常に書き換えが行われたかどうかの確認を行ってください。

これまでこの方法によるカーネルの書き換え実績はない、と警告していましたが、この方法でカーネルを書き換え、正常に動作することを確認しました。

Kernel_sourceへ戻る


リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: Sun, 20 Feb 2005 02:47:19 JST (1816d)