LinuxカーネルのEXPORT_SYMBOL_GPLとは何ですか?
EXPORT_SYMBOL_GPLは、Linuxカーネルモジュールのグローバルシンボルとしてシンボル(関数、変数、構造体など)をエクスポートするためのマクロです。
Linuxカーネルでは、EXPORT_SYMBOLとかEXPORT_SYMBOL_GPLというシンボルを付けているものがあり、これによりカーネルモジュールで利用可能になる。EXPORT_SYMBOL_GPLとEXPORT_SYMBOLの違いは、EXPORT_SYMBOL_GPLでエクスポートしたシンボルはGPLライセンス互換のモジュールでのみ利用可能だが、EXPORT_SYMBOLでエクスポートしたシンボルにはその制限がないこと。
EXPORT_SYMBOL_GPL マクロの定義は次のとおりです。
#define EXPORT_SYMBOL_GPL(シンボル) EXPORT_SYMBOL_GPL_NS(GPL, シンボル)
そのうち、EXPORT_SYMBOL_GPL_NSは異なる名前空間によってシンボルをエクスポートするために使用されるマクロ定義だ。GPLは、シンボルをGPLライセンス互換モジュールのみが利用できることを示す名前空間である。
EXPORT_SYMBOL_GPLマクロにより、関数や変数はコンパイル時にエクスポートされ、他のカーネルモジュールで使用が可能になる。これにより、カーネルモジュールはエクスポートされた関数を呼び出し、エクスポートされた変数にアクセスすることで、モジュール間での機能の拡張や共有を実現することができる。