- 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
 ※今はリンク切れ

コメント