Linux Server

FC4カーネル再構築

  

ご注意下さい

この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。

0
(0)

ちょっと時間もできたのでFedoraCore4をインストールしてみた。
前にもあったことなんだけどKernel2.6系のLinuxを入れると、
どうもパフォーマンスが悪い。時刻同期はNTPを使用してもさっぱりで
実時間1分で2分ぐらいの遅れが出てきてしまう。

これはいかん、ということでいろいろと事象を探してみると、
Kernel2.6では割り込みの回数が1000回/秒である為発生する事象ということが
わかった。Kernel2.4系では100回/秒である為、エミュレートするのにオーバー
ヘッドが大きいとか、なんか理由があるんでしょう。

Kernelを起動するときのパラメーターにclock=pitと指定すればいいとか、
いろいろとありましたが全部ダメ。

その辺のTipsは以下のサイトにあるので参考にしたい方はどうぞ。
http://groups.google.com/group/linux.kernel/msg/536a9b6b70e81456?hl=en&lr=
http://www.vmware.com/community/thread.jspa?forumID=20&threadID=4254&messageID=72875
http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1518
http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1420

結局正攻法でKernelの再構築をすることに。

基本的には /usr/src/linux/include/asm-i386/param.hの以下の部分を1000から
100に変更するだけ。

#ifndef _ASMi386_PARAM_H
#define _ASMi386_PARAM_H

#ifdef __KERNEL__
# define HZ 100 /* Internal kernel timer frequency */
# define USER_HZ 1000 /* .. some user interfaces are in "ticks
" */
# define CLOCKS_PER_SEC (USER_HZ) /* like times() */
#endif

するとでるわ、でるわエラーの数々。

大まかには以下の作業が必要です。

① 必要なパッケージをインストール
② カーネルソースをインストール
③ カーネル構築時のパラメータを指定
④ カーネル再構築

具体的には
make clean
make menuconfig
make modules_install
make install
/etc/grub.confの修正となります。

<参考サイト>
http://ysuzuki.tdiary.net/20040525.html#p01

さて、以下もうちょっと詳細な説明。

① 必要なパッケージをインストール

kernel-develパッケージが導入済みだったので、すぐにでも再構築が
可能か、と思いきや、いきなりカーネル構築時のパラメータを指定するところで
エラー発生。

具体的にはmake menuconfigでエラー。原因はncurse-develパッケージが
入っていなかったため。

make[2]: *** [scripts/lxdialog/checklist.o] エラー 1
make[1]: *** [menuconfig] エラー 2
make: *** [menuconfig] エラー 2

<参考サイト>

https://www.redhat.com/archives/fedora-list/2005-July/msg03060.html

続いて make でエラー

make[1]: *** No rule to make target `init/main.o', needed by
`init/built-in.o'. Stop.
make: *** [init] Error 2

いろいろと調べてみるとどうやらソースが足りないらしい。
前述の通りkernel-develだけではコンパイルに必要なヘッダしか
入っていないため実際にソースをインストールする必要があります。

② カーネルソースをインストール

カーネルソースは以下のサイトからダウンロード

すると、ソースがインストールできない。

error: cannot create %sourcedir /usr/src/redhat/SOURCES

どうやら、rpmbuildが入っていないためらしい。
ってことでこれもインストール。

# rpm -qa | grep rpm
rpm-libs-4.4.1-22
rpm-4.4.1-22
rpm-python-4.4.1-22
#
# yum install rpm-build
Setting up Install Process
Setting up repositories
updates-released 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
base 100% |=========================| 1.1 kB 00:00
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for rpm-build to pack into transaction set.
rpm-build-4.4.1-22.i386.r 100% |=========================| 13 kB 00:00
---> Package rpm-build.i386 0:4.4.1-22 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
rpm-build i386 4.4.1-22 updates-released 513 k

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 513 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): rpm-build-4.4.1-22 100% |=========================| 513 kB 00:01
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: rpm-build ######################### [1/1]

Installed: rpm-build.i386 0:4.4.1-22
Complete!

続いてようやくソースのインストール

# rpm -ivh kernel-2.6.11-1.1369_FC4.src.rpm

で、/usr/src/redhat/SOURCESにソースが展開。

続いて

# rpmbuild -bp --target=i686 /usr/src/redhat/SPECS/kernel-2.6.spec

にて、/usr/src/redhat/BUILD/kernel-2.6.11/linux-2.6.11にパッチが適用された
カーネルができあがるので、やっとmake関連ができるようになりました。
(実はこの時にredhat-rpm-configが足りないらしい、と怒られたので追加インストール
しました。)

<参考サイト>

③ カーネル構築時のパラメータを指定
④ カーネル再構築

③については特段新しいデバイスを認識させる予定もなかったため、

# cp -p /boot/config-2.6.11-1.1369_FC4smp ./.configとして

して済み、としましたが、そのままmakeするとエラーがでるので

# make menuconfig

後にmake、make modules_install、make installを実行するとうまくいきます。

最後にOS起動時に今回再構築したカーネルから起動するように/etc/grub.conf
を修正して完了です。

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/sda1
# initrd /boot/initrd-version.img
#
#kernel /boot/vmlinuz-2.6.11-1.1369_FC4smp ro root=LABEL=/ clock=pit nosmp noapic nolapic
#
#boot=/dev/sda
default=1 これだと昔のカーネルより起動してしまうので0に変更
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.11-prep)
root (hd0,0)
kernel /boot/vmlinuz-2.6.11-prep ro root=LABEL=/
initrd /boot/initrd-2.6.11-prep.img
今回再構築したカーネル
title Fedora Core (2.6.11-1.1369_FC4smp)
root (hd0,0)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4smp ro root=LABEL=/
initrd /boot/initrd-2.6.11-1.1369_FC4smp.img

以上

この記事は役に立ちましたか? | Is this article useful for you?

評価をお願いします | Please leave your rating.

平均 | Av.: 0 / 5. 投票数 | Votes: 0

最初の評価を下さい | Please vote for the first rating.

-Linux Server
-

© 1999 - 2021 蒲田ネット