1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NetBSDAdvent Calendar 2021

Day 11

NetBSDカーネルモジュールの依存関係を考慮しながらモジュールをアンロードしてみる

Posted at

NetBSD Advent Calendar 2021 11日目の記事です。今日は10日目の記事で紹介した、カーネルモジュールの依存関係可視化の結果を応用して、不要なカーネルモジュールの除去手順を紹介しようと思います。

compatモジュール

カーネルモジュールの依存関係を眺めていると、 compat_* という名称のモジュールが存在していることが分かります。どうやらNetBSDのシステムコールについて、後方互換性を持たせるための機能のようです。

nbsd1211_01.png

この compat_* モジュールを例に、依存関係にあるモジュールの除去を試してみます。

カーネルモジュールの除去

カーネルモジュールの依存図を参照しながら modunload コマンドでモジュールを除去してみます。
例として、 compat_netbsd32_16compat_16 を除去してみます。

# modstat | egrep 'NAME|compat_16|compat_netbsd32_16'
NAME                       CLASS    SOURCE   FLAG  REFS    SIZE REQUIRES
compat_16                  exec     builtin  -        1       - compat_20
compat_netbsd32_16         exec     builtin  -        0       - compat_netbsd32_20,compat_16

依存図から compat_16compat_netbsd32_20 に必要とされている(依存している)ことが分かります。 modstat コマンドの出力においても、 compat_netbsd32_16 のREQURESに compat_16 が表示されていることと、 compat_16 のREFSが 1 になっており、別のモジュールから参照されていることが分かります。

ここで、試しに compat_16 をアンロードしてみます。 compat_netbsd32_16 に必要とされていることから、アンロード処理はエラーとなります。

# modunload compat_16 ; echo $?
modunload: compat_16: Device busy
1

次に compat_netbsd32_16compat_16 の順番でアンロードしてみます。

# modunload compat_netbsd32_16 ; echo $?
0
# modunload compat_16 ; echo $?
0

今度は無事にアンロードできました。ただし、 modstat で確認してみるとカーネルに組み込まれた"builtin"なモジュールはメモリから解放されるのではなく、単に参照されなくなる( REFS-1 になる)だけのようです。そのため、本当に不要なモジュールを読み込ませたくない場合はカーネルコンフィグ側で設定することになりそうです。

# modstat | egrep 'NAME|compat_16|compat_netbsd32_16'
NAME                       CLASS    SOURCE   FLAG  REFS    SIZE REQUIRES
compat_16                  exec     builtin  -       -1       - compat_20
compat_netbsd32_16         exec     builtin  -       -1       - compat_netbsd32_20,compat_16

まとめ

カーネルモジュールの依存図をもとに不要なモジュールの削除を試してみました。ただし、カーネルに組み込まれているモジュールについては単に参照されなくなるだけであり、モジュール自体を読み込ませないようにするにはカーネルコンフィグ側で設定を行ったのち、カスタムカーネルを作成する必要があるようです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?