カーネルがプリエンプティブであるかどうかは、何をプリエンプトしたいかによって異なります。Linux カーネルのように、プリエンプションを個別に有効/無効にできるさまざまなものがあります。
カーネルに CONFIG_IKCONFIG
がある場合 と CONFIG_IKCONFIG_PROC
有効にすると、/proc/config.gz
でプリエンプション構成を確認できます (これがない場合、一部のディストリビューションではカーネル構成が /boot
で出荷されます 代わりに):
$ gzip -cd /proc/config.gz | grep PREEMPT
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_PREEMPT_TRACER is not set
CONFIG_IKCONFIG
がある場合 、ただし CONFIG_IKCONFIG_PROC
ではありません extract-ikconfig
でカーネル イメージから取得できます。 .
プリエンプティブル カーネル (低レイテンシ デスクトップ) には PREEMPT
があります バージョン名でタグ付けされます (uname -a
)。これは /proc/version
にも表示されます そして、特定のカーネルにモジュールをロードできるかどうかを決定するために使用される「バージョンマジック」文字列。
mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 '
should be '3.4.35 preempt mod_unload ARMv7 p2v8 '
CONFIG_PREEMPT_VOLUNTARY
にはそのようなタグ付けはありません