Kernelの再構築(updated 1999.1.29)

[ Nob's Home | LinuxPPC ]

Kernel

Linuxの中心であるkernel(vmlinuxというfile)は、
http://www.kernel.org/
http://www.linuxhq.com/ を中心にまとめられています。

Linuxのkernelには、"a.b.c"というversion numberが付きます。
現在(1999.1.29)の最新のversionは"2.2.1"です。
このうち、"b"=2番目の数字が、
奇数のものは、Development Branch 「開発版」で、
偶数のものは、Stable Release「安定版」になります。
2.2.1は安定版の最新のものです。
これまでの開発版2.1.xに変わって、2.3.xが最新の開発版になっていきます。
"c"=3番目の数字は、minnorなbug fixなどです。
2.2.0は1999.1.26にreleaseされましたが、1999.1.28には2.2.1が出ました。

従来、LinuxPPC用のkernelは、Australian National University の
Paul Mackerras さんらを中心に、独自に開発されていましたが、
(ftp://samba.anu.edu.au/pub/linux-pmac/) 2.2.0から、
正式にメインの開発の中に取り込まれました。

しかし、iMacなどへの対応は今後も
ftp://samba.anu.edu.au/pub/linux-pmac/imac/で続くものと考えられます。

どうしてkernelを再構築するか

kernelを再構築する理由はいくつかあります。

開発環境

kernelを再構築するには、開発環境が必要です。
Installの際にX DevelopmentとDevelopment Librariesのセットを選んであればよいでしょう。
もし、それらのsetがinstallしてない場合には、installerを起動して、
updateするか、拙作のcomps2shを利用してください。
installerのCD-ROMのRedHat/base/compsから各セットのpackageをinstallするshell scriptを生成します。
$ su 
# mount /dev/cdrom /mnt/cdrom
# perl comps2sh 
実行したdirに install_C_Developmentなどのscriptができます。
# sh install_X_Development
などと実行して各packageをinstall します。

Kernel sourceの入手

Kernel.orgの日本のmirrorサイトもありますが、
できるだけ、近くのRING serverを使用してください。

今回は、 http://ring.asahi-net.or.jp/pub/linux/kernel.org/kernel/v2.2/
を利用させていただきました。

UNIX UsersやLinux Japanなどの雑誌のCD-ROMに収載されると思われます。

何をgetすべきか

 LATEST-IS-2.2.1           29-Jan-1999 05:56     0k  
 README                    26-Jan-1999 10:43     1k
 linux-2.2.0.tar.bz2       26-Jan-1999 10:41  10.1M  
 linux-2.2.0.tar.bz2.sign  26-Jan-1999 10:41     1k  
 linux-2.2.0.tar.gz        26-Jan-1999 10:41  12.5M  
 linux-2.2.0.tar.gz.sign   26-Jan-1999 10:41     1k  
 linux-2.2.1.tar.bz2       29-Jan-1999 05:56  10.1M  
 linux-2.2.1.tar.bz2.sign  29-Jan-1999 05:56     1k  
 linux-2.2.1.tar.gz        29-Jan-1999 05:56  12.5M  
 linux-2.2.1.tar.gz.sign   29-Jan-1999 05:56     1k  
 patch-2.2.1.bz2           29-Jan-1999 05:56    22k  
 patch-2.2.1.bz2.sign      29-Jan-1999 05:56     1k  
 patch-2.2.1.gz            29-Jan-1999 05:56    24k  
 patch-2.2.1.gz.sign       29-Jan-1999 05:56     1k  
ある日のkernel/v2.2のdirectoryです。
最新versionは"LATEST-IS-2.2.1"であることがわかります。
inux-2.2.0.tar.bz2は bzip2という比較的新しい圧縮方法で圧縮されたファイルです。
$ which bzip2
/usr/bin/bzip2
と見つからなければ、CD-ROMなどのRedHat/RPMS/からrpm -ivhしてinstallしておいてください。
linux-2.2.0.tar.bz2.signは、配付されているfileが改竄されていないか確認するための、
pgpのサインファイルです。対応するsource fileとともにgetしてください。

入手したファイルはkernel sourceのPGPによる検証方法を参照して、
検証してください。

初めてkernelのソースをgetする場合には、最新のbz2形式(この場合linux-2.2.1.tar.bz2)をgetしてください。
もし、少し前の(この場合 linux-2.2.0 )のソースが入手済みならば、
そこからの patch ファイル(とそのsignファイル)を入手してください。(patch ファイルもsignで検証します)

sourceの展開

/usr/src/linux が存在している場合は、あらかじめ別の名前にしておいてください。
sourceを展開した後、/usr/srcへ移動し、必要ならpatchをあてます。
また、/usr/src/linuxを/usr/src/linux-2.2.1と名前を変えて、
/usr/src/linuxへlinkしておきます。
ここでは、2.2.0のsourceを展開し、2.2.1へのpatchをあててみます。

$SRC = kernelのsource, patchが存在するdirectoryの名前とします。

$ su
# bzip2 -dc $SRC/linux-2.2.0.tar.bz2 | tar -xvf - -C /usr/src
# cd /usr/src
# bzip2 -dc $SRC/patch-2.2.1.bz | patch -p0
# mv /usr/src/linux /usr/src/linux-2.2.1
# ln -s /usr/src/linux-2.2.1 /usr/src/linux

kernelのconfig

/usr/src/linuxに移動して、kernelの設定configurationを行います。
# cd /usr/src/linux
# make mrproper (注:初期状態に戻します。初めてmakeするときは必要ないです。)
# make config または make menuconfig または make xconfig

ここで、自分のkernelに必要な機能をYesにし、不要な機能をNoにします。
それぞれの項目については、 Configure.help日本語版を参照してください。
まず、最初は、defaultのままでSave & Exitして、
実験してみるとよいでしょう。

Save & Exitすると、/usr/src/linux/.config というファイルができます。

#
# Automatically generated make config: don't edit
#

#
# Platform support
#
CONFIG_PPC=y
CONFIG_6xx=y
# CONFIG_8xx is not set
CONFIG_PMAC=y
# CONFIG_PREP is not set
# CONFIG_CHRP is not set
# CONFIG_ALL_PPC is not set
# CONFIG_APUS is not set
# CONFIG_MBX is not set
CONFIG_MACH_SPECIFIC=y
# CONFIG_SMP is not set
以下略。

kernelのmakeとmoduleのmake&install

# make dep
# make clean
# make または make vmlinux
# make modules
# make modules_install
しばらくするとエラーもなくmakeが終了するはずです。
# ls -l vmlinux
でvmlinuxができているか確認してください。

kernelのinstall

OpenFirmwareでbootしている場合は、

# mv /boot/vmlinux /boot/vmlinux.old
# mv /boot/System.map /boot/System.map.old
# cp vmlinux /boot/
# cp System.map /boot/
としてください。

BootXで起動している場合には、 HFSを/mnt/mac などに mountして、

# cp vmlinux /mnt/mac/
として、一旦、LinuxPPCをshutdown -rしてMacOSを再起動します。
HFSにcpされているvmlinuxをシステムフォルダに入れてLinuxPPCを再起動してください。

!!! 注意 !!! HFSへの書き込みは HFS を破壊する恐れがあります。
(書き込みだけなら問題なく、rmすると破壊されるという説もあります)
LinuxPPCとMacOSのdataのやり取り専用のpartitionをHFSで作っておくのが、
よいと思います。

新しいkernelでbootしてみてください。
[ Nob's Home | LinuxPPC ]
nob@makioka.y-min.or.jp