Carpe Diem

  Top > スポンサー広告> Linuxカーネル > Linuxカーネルコンパイル  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Linuxカーネルコンパイル

2012 - 03/15 [Thu] - 22:03

前回に引き続きカーネルの更新についてです。今回はやや難しいやり方。
手順としては
①コンパイル環境の設定&カーネルソースを手に入れる
②現カーネルを元に、更新カーネルの設定をする
③②とは別の設定。CPUとか。
④コンパイルして.debファイルを作成
⑤インストール

となります。

◆コンパイル環境
幾つかのパッケージをインストールします。
# aptitude install build-essential kernel-package libqt3-mt-dev libncurses5-dev

◆ソースのダウンロード

The Linux Kernel Archives

好きなバージョンを選んでいいですが、あんまり現バージョンと離れすぎると、引き継ぐ設定とは別で新しい項目がたくさんになるので出来れば近いものの方が問題なくバージョンアップできると思います。

私が試したのは
Ubuntu11.04:3.0→3.3
Ubuntu10.04:2.6.32.39→2.6.32.56


です。結論から言うと前者は成功、後者はカーネルパニックになったので何度も再検証してます。未だに解決できてないのでこれはまたカーネルパニックへの対応として別記事で載せる予定です。

◆解凍して現バージョンから設定を引き継ぐ
ダウンロードしたソースは/usr/src/へコピーします。
# mv linux-source-xxx.tar.bz2 /usr/src/
# cd /usr/src
# tar xvjf linux-source-xxx.tar.bz2
# cd linux-source-xxx

ディレクトリ移動して解凍。そして移動。
現バージョンの設定を持ってきます。

# cp /boot/config-xxx-generic .config
# make oldconfig



◆個別設定
次にGUIで各種設定を行います。
# make xconfig

make menuconfigでも同じ事ができますが、xconfigの方がGUIな分わかりやすいです。
主に編集するのはCPUの部分。これをいじるだけで随分変わるそうな。実際試した感想では特にわからなかったが。
以下すべてProcessor type and featuresの設定。

Processor Family:Core 2/newer Xeon
High Memory Support:4G以上なら64Gを選択
Maximum Number of CPUs:コアの数。仮想含む。システムモニタに表示される分 (ダブルクリックで編集できるようになる)
SMT(Hyper Threading) Scheduler Support;Core iシリーズならON
Preemption Model:Preemptible Kernel(Low Latency Desktop)
Timer Frequency:
1000Hz

終わったら保存して終了します。


◆カーネルコンパイル

# make-kpkg clean
# make-kpkg --initrd kernel_image kernel_headers --append_to_version="string" --revision=123 -j 3


「-j」は並列コンパイルのオプションです。ただ10.04では出来なかったので、その場合は以下のコマンドを打った上で
# export CONCURRENCY_LEVEL=3(コア数+1がいいらしい)

大体2コアで30〜40分、12コアでは7分程度で終わりました。やっぱり並列処理させると早いんですね。


◆できた.debファイルをインストール
/usr/src/にimage.debとheaders.debができているので、それを

image→headers

の順にインストール

再起動後に
# cd /lib/modules/(新しいカーネル名)
# ln -s /usr/src/linux-headers(新しいカーネル名) build

としてシンボリックリンクを張る。こうしないと新しいカーネルでドライバ類をインストールしようとするときにダメになるらしい。最悪起動しなくなるとも。

で、先に申し上げたように再起動後11.04は問題なく更新でき、10.04の方はカーネルパニック。
まぁ古いカーネルで再起動してSynapticでインストールしたカーネルを削除すれば元通りになりましたが。
あとブート時のOS数も更新されたりされなかったりで不明。もう少し検証する必要がありますね。


◆補足
もしコンパイル中にerrorが起きたら以下の対処をすればいいかも。私のケースでは必要ありませんでしたが。
# ln -s /usr/src/linux-source-xxx/ubuntu /ubuntu

◆補足2
# make xconfig
.....
In file included from scripts/kconfig/qconf.cc:48:
scripts/kconfig/qconf.moc:13:34: error: private/qucomextra_p.h: そのようなファイルやディレクトリはありません


みたいなエラーが起きて起動ができない場合はQtの選択が違う可能性が高いです。普通はQt4にしないとダメなので

# update-alternatives --config moc
  選択肢    パス            優先度  状態
------------------------------------------------------------
* 0            /usr/bin/moc-qt3   45        自動モード
  1            /usr/bin/moc-qt3   45        手動モード
  2            /usr/bin/moc-qt4   40        手動モード


をしてqt4を選択してください。ただカーネルが古い場合は逆にqt3じゃないと動かないとかいう記事もありました。選択したら

# make distclean
# make xconfig


このdistcleanを忘れると起動しないので注意。


ソース:
Ubuntu 11.04ではじめてのカーネルコンパイル&インストール
初めてのKernel compile ~xconfig編~
Ubuntu日本語フォーラム カーネルをコンパイルしよう
make xconfig broken on 2.6.37-rc2
ハウツー:自分のシステムに最適なカーネルを構築する

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。