はじめに
いろいろな書籍や雑誌、WEBサイトの記事等を読んでいくなかで、Linuxカーネルのソースコードを見たい時(きちんと読める訳ではありませんが…)が何度かありましたので、自身のCentOS 6.3環境にソースコードを取得して、それを参照できるようにしてみました。
環境
実施した際の環境は以下の通りです。
OS | CentOS 6.3 x86_64 (64bit) |
カーネルバージョン | 2.6.32-279.22.1.el6.x86_64 |
カーネルのソースコードのダウンロード手順
Yumリポジトリの設定
CentOS 6.2からソースコードが http://vault.centos.org に配置されているようですので、yumでこれを参照できるようにリポジトリの設定を行います。
rootにスイッチします。
$ su -
パスワード:
CentOS-Source.repoというリポジトリ設定ファイルを作成し、以下のような内容を記載します。
# cd /etc/yum.repos.d
# vim CentOS-Source.repo
[base-source]
name=CentOS-$releasever - Base Source
baseurl=http://vault.centos.org/$releasever/os/Source/
gpgcheck=1
enabled=0
gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6
[updates-source]
name=CentOS-$releasever - Updates Source
baseurl=http://vault.centos.org/$releasever/updates/Source/
gpgcheck=1
enabled=0
gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6
[extras-source]
name=CentOS-$releasever - Extras Source
baseurl=http://vault.centos.org/$releasever/extras/Source/
gpgcheck=1
enabled=0
gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6
リポジトリの設定はこれで完了です。
ソースコードのRPMパッケージのダウンロード
ソースコードをRPMパッケージをダウンロードします。
作業用のディレクトリを作成します。ここでは/tmp配下にkernelというディレクトリを作成しています。
# mkdir -p /tmp/kernel
作成したディレクトリに移動します。
# cd /tmp/kernel
CentOS 6.3のカーネルをダウンロードします。--releaseverオプションでバージョンを指定します。
# yumdownloader --source kernel --releasever=6.3
以下のファイルが取得されています。
# ls
kernel-2.6.32-279.22.1.el6.src.rpm
RPMパッケージからソースコードのファイルの取得
RPMパッケージからファイルを取り出します。これを実施するにはRPMパッケージをcpio形式のアーカイブファイルに変換し、cpioコマンドで取り出すことができます。具体的なオペレーション手順としては、rpm2cpioコマンドでRPMファイルをcpioファイルに変換し、標準出力に出力されるcpio形式のアーカイブをパイプでcpioに渡して展開します。
# rpm2cpio kernel-2.6.32-279.22.1.el6.src.rpm | cpio -id
167602 blocks
いくつかのファイルが生成されますが、その中にlinux-2.6.32-279.22.1.el6.tar.bz2というファイルがあります。これを展開します。
# tar -xjvf linux-2.6.32-279.22.1.el6.tar.bz2
linux-2.6.32-279.22.1.el6ディレクトリが作成され、その配下にカーネルのソースコード類が配置されています。
# cd linux-2.6.32-279.22.1.el6
# ls
COPYING Makefile block include lib security
CREDITS Makefile.common crypto init mm sound
Documentation README drivers ipc net tools
Kbuild REPORTING-BUGS firmware kabitool samples usr
MAINTAINERS arch fs kernel scripts virt
これでCentOS 6.3のソースコードの取得ができました。
私はApacheのドキュメントルート以下のディレクトリにシンボリックリンクを張って、httpでWEB上から参照できるようにしています。
おわりに
カーネルのソースコードを解読するのは今の自分にかなりハードルが高いですが、OSの仕組みを知る上ではカーネルの仕組みを理解するのは大事なことだと思いますので、少しずつ目を通して理解を深めていきたいと思います。