今回buildrootで作成した環境でデバドラをmakeした際に、
生成した.koをmodinfoで見てみるとvermagicにpreemptが入ってなかったので
preemptを入れるための手順を書き残す
今回はandroid-kvmの環境を利用したので実施手順は以下
(android-kvmのbuildroot -> https://android-kvm.googlesource.com/buildroot/)
- git clone https://android-kvm.googlesource.com/buildroot
- cd buildroot
- make linux-menuconfig
- General Setup -> Preemption Model ↓
で、以下の3つが出てくるので、好きなものを選んだらOK
No Forced Preemption
Voluntary Kernel Preemption
Preemptible Kernel
ちなみに上記3つについて詳しくないので、ChatGPTさんに聞いてみたところ以下のように説明してくださいました。
No Forced Preemption(強制プリエンプションなし)
この設定では、カーネルが割り込みを受け付けたときに、実行中のプロセスを中断しないようにします。つまり、カーネルは、プロセスが完全に処理を終了するまで、その処理を中断することはありません。この設定は、リアルタイムシステムのような、高度に予測可能で安定したシステムに適しています。
Voluntary Kernel Preemption(任意のカーネルプリエンプション)
この設定では、カーネルは、実行中のプロセスを割り込むことができますが、プロセスが自発的に実行を中断するまで待ちます。つまり、カーネルは、プロセスが次の待ち状態になるまで、割り込みを行いません。この設定は、リアルタイム性を重視しなければならないが、安定性も必要な場合に適しています。
Preemptible Kernel(プリエンプティブカーネル)
この設定では、カーネルは、実行中のプロセスをいつでも割り込むことができます。つまり、カーネルは、プロセスがどのような状態にあっても、割り込みを行うことができます。この設定は、リアルタイム性を重視する場合に適していますが、安定性に影響を与える可能性があるため、慎重に使用する必要があります。
上記の設定は、システムの目的や要件に応じて適切に設定する必要があります。例えば、リアルタイムシステムでは、プリエンプションの制御が重要であり、安定性が重視される場合は、"No Forced Preemption"を設定することが望ましいでしょう。
とのことです。
わかりやすくて、勉強になる。