カーネル2.4.0導入活用術





主な内容
Linux kernelとは
Linux kernel 2.4の新機能
 大規模リソースが利用可能に
 LVM(論理ボリュームマネージャ)
 rawデバイス
 kHTTPd
kernel 2.4.0導入実践記

 まずはダウンロードから
 ソースのインストール
 カーネルの設定
 カーネルのコンパイル
 Rio500を使ってみる

kernel 2.4.0導入実践記

 それでは、実際に2.4.0を導入してみることにしましょう。特に、今回はMP3プレーヤとして爆発的に売れたDiamond Rio500との接続を目指すことにします。

 Rio500はUSBケーブルを使ってPCと接続し、MP3ファイルをPC側からアップロードする仕様になっています。Rio500を購入すると、このUSBケーブルとWindows/Macintosh用のドライバやアップロード用ソフトが添付されてきます。愛用していたCD Walkmanが半年ほど前に壊れたとき、MD WalkmanとMP3プレーヤのどちらを購入するか迷ったあげく、Rio500を購入しました。

 今回の2.4.0にはRio500と接続できるドライバが収録されているので、LinuxからもMP3ファイルをアップロードできるはずです。ただし、ドキュメントには「EXPERIMENTAL」(実験用)と書いてあり、ちょっと不安ではあるのですが……。

 今回の実験では、Red Hat Linux 7(改訂版)にkernel 2.4.0を導入することにします(Red Hat Linux 7は、標準では2.2.16のカーネルが採用されています)。

 また、利用したハードウェア環境は以下のとおりです。

  • CPU : Celeron 633MHz
  • メモリ : 384MB
  • チップセット : Intel 815E

まずはダウンロードから

 まずは、2.4.0のソースをダウンロードしなければなりません。ソースは、以下の「The Linux Kernel Archives」が本家ですが、時間帯によっては混んでいることもあるので、国内のringサーバープロジェクトのミラーサイトを利用した方がいいでしょう。

The Linux Kernel Archives
http://www.kernel.org/

RingServer Project
ftp://ftp.ring.gr.jp/
ftp://ftp.ring.gr.jp/pub/linux/kernel.org/kernel/v2.4/

 これらのサイトから、linux-2.4.0.tar.gzをダウンロードすることにします。私はftp://ring.so-net.ne.jp/からダウンロードすることにしました。ファイルは20MB強もあったので、64kbps環境の私にはちょっと苦しいダウンロードになりました。

ソースのインストール

 とりあえず、ダウンロードしてきたファイルを自分のホームディレクトリ(例では~hamano)に置きます。このファイルは圧縮されているので、まずこれを解凍します。kernelのソースは/usr/srcの下のlinux-<バージョン>というディレクトリの下に置くのが慣例となっているので、以下のようにして/usr/src/linux-2.4.0下にソース一式を格納します。

# cd /usr/src
# rm linux
# tar xzvf ~hamano/linux-2.4.0.tar.gz
# mv linux linux-2.4.0
# ln -s linux-2.4.0 linux

 最後の行は、このディレクトリに対して/usr/src/linuxなるシンボリックリンクを作成するためのものです。

カーネルの設定

 それでは、カーネルの設定を始めましょう。X Window System(以下X)を利用している環境であれば、以下のような手順でxconfigを起動します。Xを利用していない場合は、xconfigの代わりにmenuconfigなどを利用します。

# cd /usr/src/linux
# make mrproper
# make xconfig

 xconfigを起動すると以下のような画面が表示されます。この画面を使って、自分が必要なデバイスドライバや、カーネル内で利用するパラメータ値を設定したりします。大抵の項目は、y、m、nの3つから選択できるようになっていて、yはその機能をカーネル内に取り込む設定。mはカーネル自体には取り込まないがモジュールとして準備しておき、いつでも使えるようにする設定。nはその機能を使わない設定を意味しています。

xconfigのメイン画面(クリックすると拡大表示します

 lspciコマンドなどを利用して自分が使っているハードウェア環境を調べ、必要なデバイスドライバを組み込むようにします。私もいくつか設定をデフォルトの状態から変更したので、その一部を紹介したいと思います(変更すべき項目は環境によってそれぞれです)。

Code maturity level optionsPromot for development and/or incomplete code/drivers

 この項目をyにすると、まだ正式サポートされていない機能やデバイスが選択できるようになります。Rio500のドライバを設定するのに必要となります。

Processor type and featuresProcessor family

 デフォルトでは「Pentium-III」になっていますが、私のマシンのCPUはCeleronなので(ビンボーなのです……)、「Pentium-Pro/Celeron/Pentium-II」に変更しました。

Network device supportEthernet(10 or 100Mbit)の中

 このマシンに入っているネットワークカードが3Comの3c905-TXというものなので、「3Com cards」をyとし、「3c509/3c900 series support」をmとしました。

Charactor devicesIntel I810/I815 support

 マザーボードのチップセットがi815Eなのでyとしました。

USB Support

 Rio500とPCをUSBで接続するので、USBに関する設定の幾つかをyやmとしました。特に、「UHCI Alternate Driver support」をyにし、一番下にある「USB Diamond Rio500 support」をmにしました。

USB supportの設定画面(クリックすると拡大表示します

 必要な設定を終えたら、「Save and Exit」をクリックして終了します。


カーネルのコンパイル

 それでは、カーネルのコンパイルを始めましょう。

# unset LANG
# make clean dep bzImage modules

 これで、もしエラーが出なければ問題ありません。私がやった限り、いくつかの設定パターンでエラーが出て、途中で止まってしまいました。止まったときは、表示されているメッセージの最後の方を読むとなんとなくどこが悪いかが分かります。

 それでは、今作ったカーネルとそのモジュールを適切な場所に配置します。ここでは、すでに入っている2.2.16の設定を消さないように注意する必要があります。

# make modules_install
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.0
# cd /usr/src/linux
# mv /boot/System.map /boot/System.map-2.2.16
# cp System.map /boot/System.map-2.4.0
# ln -s /boot/System.map-2.4.0 /boot/System.map

 あとはブート時に2.4.0の方が立ち上がるように設定するだけです。

# vi /etc/lilo.conf

として、liloを以下のように書き換えます。

 既存の、

image=/boot/vmlinuz-2.2.16-22
label=linux
read-only
root=/dev/hda1

のlabelの部分をlinuxからlinux22に変更したあと、ファイルの一番最後に

image=/boot/vmlinuz-2.4.0
label=linux
read-only
root=/dev/hda1

を追加します。設定が終わったらviを終了して

# lilo -v

と入力します。これで、次回起動時には2.4.0が立ち上がります。ちなみに、電源投入後に出てくる「lilo:」のところで「linux22」と入力すると、いままで使っていたカーネル(2.2.16)が立ち上がります。

 うまくいったようであれば、

# /sbin/shutdown -r now

として再起動してみてください。きちんと設定できていれば、2.4.0が起動するはずです。最初のブート画面がものすごい勢いで流れていくので、本当に2.4.0が立ち上がっているのか不安だったので、

# uname -r

と入力してバージョンを確認しました。うまく立ち上がっていれば2.4.0と表示されるはずです。

 これでカーネル自体の入れ替えは終わりです。私の環境では、設定からここまでで約40分くらいかかりました。

カーネル2.4.0にしたLASER5 Linux 6.4のログイン画面(編集局作成)

Rio500を使ってみる

 2.4.0ではUSBが使えるほか、「実験的」とはしながらもRio500との接続用のドライバが準備されています。ここでは、いま作ったカーネル上で必要なアプリケーションの設定を行い、Rio500へMP3ファイルをアップロードできるようにしたいと思います。

これをPCと通信できるようにします

 まずは、Rio500と通信するためのソフトをダウンロードしてきます。

RIO 500 linux drivers
http://rio500.sourceforge.net/
http://download.sourceforge.net/rio500/rio500-0.7.tar.gz

 ダウンロードが終わったら展開し、コンパイル・インストールと進めていきます。

# tar xzvf rio500-0.7.tar.gz
# cd rio500-0.7
# ./configure
# make
# make install

 これでインストールは完了です。インストールすると、

  • rio_add_directory
  • rio_add_song
  • rio_font_info
  • rio_get_song
  • rio_add_folder
  • rio_del_song
  • rio_format
  • rio_stat

の8つのプログラムが/usr/local/binの下にインストールされます。

 それではRio500を接続してみましょう。Rio付属のUSBケーブルを使ってPCとつなぎます(ここでRioの電源を入れておきます)。そして、Rio用のモジュールをインストールします。

# modprobe rio500
# rio_stat

と入力すると、

Your Rio500 has firmware revision 1.04
Card 0 reports 25 Mb free (26214400 bytes) out of 64 Mb (67108864 bytes).
Command 0x57 returned:
 first_free_block = 0x000009c0
 sl = 0x00000640
-------------------------------------------------------------
  N   offset  num songs       Folder Name
-------------------------------------------------------------
( 0)  0x0017  ( 9 items)      music


   (num) offset      size         song name
    ( 0) 0x011d  ( 4044928 bytes) Ah_Yokkata.mp3
    ( 1) 0x0214  ( 5337216 bytes) Sayonara_Daisukinahito.mp3
    ( 2) 0x035a  ( 3954816 bytes) Blue_HEAVEN.mp3
    ( 3) 0x044c  ( 4378752 bytes) TSUNAMI.mp3
    ( 4) 0x0558  ( 4640896 bytes) Kakashi.mp3
    ( 5) 0x0674  ( 4620416 bytes) Saudade.mp3
    ( 6) 0x078f  ( 3676288 bytes) Makenaide.mp3
    ( 7) 0x0870  ( 4196480 bytes) Eien.mp3
    ( 8) 0x0972  ( 5529728 bytes) Kittowasurenai.mp3

といった感じで、現在Rioの中に入っているデータのリストが表示されます。これはまさしく、いまRioに私が入れているデータです(成功です!)。

 それでは次に、今回の目標であるMP3ファイルのアップロードをしてみましよう。コマンドrio_add_songに、アップロードしたいMP3ファイルをオプションとして渡すことで、アップロードできるようです。

# rio_add_song ~hamano/wish.mp3
Transfering file: /home/hamano/wish.mp3 ......................................
(done. Transfered 4648960 bytes.)

 本当にアップロードできているのでしょうか。ちょっと不安なので確認してみます。

# rio_stat
Your Rio500 has firmware revision 1.04
Card 0 reports 20 Mb free (21561344 bytes) out of 64 Mb (67108864 bytes).
Command 0x57 returned:
 first_free_block = 0x00000adc
 sl = 0x00000524
-------------------------------------------------------------
  N   offset  num songs       Folder Name
-------------------------------------------------------------
( 0)  0x0017  (10 items)      music


   (num) offset      size         song name
   (num) offset      size         song name
    ( 0) 0x011d ( 4044928 bytes) Ah_Yokkata.mp3
    ( 1) 0x0214 ( 5337216 bytes) Sayonara_Daisukinahito.mp3
    ( 2) 0x035a ( 3954816 bytes) Blue_HEAVEN.mp3
    ( 3) 0x044c ( 4378752 bytes) TSUNAMI.mp3
    ( 4) 0x0558 ( 4640896 bytes) Kakashi.mp3
    ( 5) 0x0674 ( 4620416 bytes) Saudade.mp3
    ( 6) 0x078f ( 3676288 bytes) Makenaide.mp3
    ( 7) 0x0870 ( 4196480 bytes) Eien.mp3
    ( 8) 0x0972 ( 5529728 bytes) Kittowasurenai.mp3
    ( 9) 0x001a ( 4648960 bytes) wish.mp3

 確かにアップロードできているようです。

 Rioをケーブルから外し、イヤホンで再生してみると、いまアップした曲が確かに流れています。無事アップロードも成功というわけです。

 以上、短い解説ではありましたが、私の2.4.0インストール体験を紹介させていただきました。

 この2.4.0、本当に必要な機能が実装され、安心して使えるようになるにはまだまだ時間がかかるでしょうし、現場で使われ始めるのはもっと後になるでしょうが、それだけに期待も膨らみます。

 みなさんも、ぜひ空いているマシンにでもインストールして試してみてください(VMwareで遊ぶなんて手もありますよ!)。

2/2

Linux Square全記事インデックス


 Linux Squareフォーラム Linuxカーネル関連記事
連載:Linux Kernel Watch(連載中)
Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします
連載:Linuxファイルシステム技術解説
ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する
特集:全貌を現したLinuxカーネル2.6[第1章]
エンタープライズ向けに刷新されたカーネル・コア
ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する
特集:/procによるLinuxチューニング[前編]
/procで理解するOSの状態

Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する
特集:仮想OS「User Mode Linux」活用法
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
Linuxのカーネルメンテナは柔軟なシステム
カーネルメンテナが語るコミュニティとIA-64 Linux
IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間