[Linux]EXPORT_SYMBOL_GPL について

  • K24: /proc/ksyms において ‘GPLONLY_’ というプレフィックスが付く
  • K26: /proc/kallsyms において ‘_ksymtab‘ というプレフィックスが付く

GPL ライセンスのモジュールとシンボル

参考リンクに記載されていました。

カーネル 2.4.10 からモジュールはライセンス文を含むことになり、 MODULE_LICENSE() によって定義されることになった。

いくつかの文字列は GPL 互換であると認識される。
それ以外のライセンス文字列だったり、そもそもライセンスがない場合は、そのモジュールはプロプラエタリなものとして扱われる。
GPL 互換とされるライセンス文字列については include/linux/module.h を参照すること。

カーネルが /proc/sys/kernel/tainted flag をサポートする場合は、 insmod は GPL ライセンスを持たないモジュールのロード時に、 tainted (汚染) フラグを ‘1’ と OR する。
カーネルが tainting をサポートしていると、ライセンスのないモジュールがロードされる際には警告が発せられる。
警告は GPL 互換でない MODULE_LICENSE() を持つモジュールに対しては (tainting をサポートしていない古いカーネルでも)、常に警告が発せられる。これによって、新しいモジュールが古いカーネルで利用されるときも、警告は最小限になる。

insmod -f (強制) モードでは、tainting をサポートするカーネルなら tainted フラグが ‘2’ と OR され、常に警告が発せられる。
カーネル開発者の中には、彼らのコードがエクスポートするシンボルは、 GPL 互換なライセンスのモジュールからしか利用できないようにしたい、と考えている人たちがいる。
これらのシンボルは EXPOET_SYMBOL の代わりに EXPORT_SYMBOLGPL でエクスポートされる。
カーネルや、別のモジュールによってエクスポートされた GPL オンリーのシンボルは、GPL 互換なライセンスのモジュールからしか見えない。
これらのシンボルには、 /proc/ksyms において ‘GPLONLY
‘ というプレフィックスが付く。

insmod は GPL ライセンスのモジュールをロードするときは、シンボルの ‘GPLONLY_’ プレフィックスを無視し、通常のシンボル名の部分だけを参照する。
GPL オンリーのシンボルは GPL 互換なライセンスを持たないモジュールに対しては利用可能とならない。ライセンスを全く持たないモジュールに対しても同様である。

参考URL

http://www.linux.or.jp/JM/html/modutils/man8/insmod.8.html
※今はリンク切れ

コメント

タイトルとURLをコピーしました