12021-09-17
昨日(12021年9月17日)の日記です。 この日は11時に起き、28時に寝ました。 そういう日もあります。
Linuxカーネルを見る
そういえば夏休みが始まる直前に色々と面白そうな本を借りてきました。 そのうちの一つに、 「Linuxカーネル2.6解読室」という本があります。 まあ文字通りLinuxカーネルを解説する本で、 どういう構造になっているかを細かく説明していて、 さらに時折ソースコードを抜粋して解説しています。
Linuxをまともに触ったことがない上に、 まだパラパラめくっただけなので、 私にはさっぱりなのですが、 今回気まぐれでソースコードを落としてみて、 最初の部分を読みながら、 ソースコードを突き合わせて、 見比べてみました。
落としてきたバージョンは5.14.5です。 本で扱っているバージョンは2.6.15ですが、 やっぱりどうせ見るなら最新バージョン(stable)がいいなと思って、 執筆時の最新バージョンを落としました。 ここから落とすことができます。 約118MBととても軽いですが、 解凍すると約1019MBに膨れ上がります。 なお、GitHubにもリポジトリがあります。
さてその後、 「Linuxカーネル2.6解読室」に書かれているソースコードを探してみましたが、 これが結構大変でした。 この本が書かれているバージョンと3も離れているからか、 やはり色々と変わっていました。
ところで、 驚くべきことにLinuxカーネル2.6解読室の一部は ここ で公開されています。 過去の内容とはいえ、 貴重な日本語資料なので、 気になる方はここを覗いてみるといいです。
本には
と書かれていましたが、 現在のバージョンでは3000万行を上回っています。 恐ろしいですね。
Linuxカーネルのコードのうち、約半分がdrivers以下のデバイスドライバ用コードですが、Linuxカーネルの動きを理解するためには、代表的な一部のドライバの動きを理解するだけで大丈夫です。
これは現在のバージョンでもそうでした。 全てのサイズが1019MBで、 そのうちdriversが689MBも占めており 全体の60%以上を占めていました。
本には、 Linuxカーネルのソースツリーが示されていましたが、 これは現在のバージョンでも変わりないようです。
ディレクトリ | 種類 | 概要 |
---|---|---|
arch | 本体 | CPUアーキテクチャに依存している部分 |
block | 本体 | ブロック型デバイス制御に関すること |
certs | 本体 | 証明書の保存やキャッシュに関すること*1 |
crypto | 本体 | 暗号処理に関すること |
Documentation | 文書 | ドキュメント |
drivers | 本体 | デバイスを制御するためのドライバに関すること |
fs | 本体 | ファイルシステムに関すること |
include | 本体 | コンパイル時に参照するヘッダーファイル |
init | 本体 | カーネル起動時に呼び出される初期化処理の本体 |
ipc | 本体 | IPCに関すること |
kernel | 本体 | 基本的な機能に関すること |
lib | 本体 | カーネルのライブラリ本体群 |
LICENSES | 文書 | ライセンス |
mm | 本体 | メモリ管理に関すること |
net | 本体 | ネットワークプロトコルに関すること |
samples | 付属 | カーネルモジュールの例*2 |
scripts | 付属 | カーネルの構成時に使用されるスクリプト群*3 |
security | 本体 | セキュリティに関すること*4 |
sound | 本体 | サウンドドライバに関すること |
tools | 付属 | 付属ツール(perfなど)*5*6 |
usr | ? | ? |
virt | 本体 | 仮想化に関すること |
「?」になっているところは、
本には表には載っておらず、
調べたけど情報が出てこなかったものです。
本に書かれていないのはバージョンの違いなのか、
単に重要ではないから省かれているのかは分かりません。
(追記:調べました。答えはどっちもです。その頃のバージョンにはなかったディレクトリもあれば、その頃にはすでにあるディレクトリもありました。)
(さらに追記:色々調べたら、色々なサイトを見つけました。参考文献として最後に記しておきます。usr
のところだけわかりませんでした)
今日はまあそんなところですかね。
龍が如く
友達がやっていました。 課金すると強くなるらしいです。
言語
久しぶりにSCJに顔を出しました。 Hsjoihsさんがよく話す日でした。
*1:https://umbuzu.com/267517/what-is-the-purpose-of-certs-directory-in-linux-kernel-source
*2:https://unix.stackexchange.com/questions/78714/what-are-some-of-these-directories-in-the-linux-kernel-src
*3:https://tldp.org/LDP/tlk/sources/sources.html
*4:https://atmarkit.itmedia.co.jp/flinux/rensai/lsm01/lsm01b.html
*5:https://qiita.com/progrunner/items/d2ab0a85b3881a4b7ed8
*6:https://unix.stackexchange.com/questions/78714/what-are-some-of-these-directories-in-the-linux-kernel-src