Linuxの備忘録とか・・・(目次へ)Linuxの備忘録とか・・・(目次へ)GPLライセンスの実装GPLライセンスはOSSで有り続けるためのGNUが提唱するライセンスだと認識している。GPLライセンスのコードを利用して作成されたものはソースを公開しなければならないという。昨年マレーシアで年1度行われるOSSのカンファランスで、GNUのリチャード・ストールマンがきていてGPLライセンスの話をした。そこにシンガポールのレッド・ハットのなんとかモリスって言う人と激しく言い争っていたのを思い出す。あとで調べた分かった事だが、このモリスって言う人カーネルメンテナで有名な人らしい。言ってる詳細は私の英語力ではフォローしえるものでないのだが、ソース公開というGPLライセンスにLinuxを商用で使っている人にとっては大きなネックとなるようで、たぶんこの辺りの激論か?そりゃソース公開だもんな。GPLライセンスとしなければ大抵のLinuxシンボルは使えない。なるとGPLライセンスとしなければならない。なるとソース公開ってことになる。それはともかくこのGPLライセンスの実装をみてみようと思う。(リチャード・ストールマンって変わったおっさんって感じ。)マクロを記述するだけである。これで.modinfoセクションにlicense=GPLが埋め込まれる。kernel_symbol(valueにはアドレス、*name;はシンボル名のポインター)の形態で埋め込まれる。シンボルのオフセット};実際ダンプしたものを見たほうが手っ取り早い。lmod............__ksymtab_gplおよび__ksymtabは以下のとうり。シンボル名のアドレスは__ksymtab_stringsセクション内のオフセットとなる。aa1すなわちEXPORT_SYMBOL_GPLすると、そのシンボルは__ksymtab_gplに設定されていくことになるわけだ。モジュールはload_module関数でシステムに組み込まれる。モジュールそのものはElfフォーマットであり、通常はリンカーがアドレス参照を解決するわけだが、動的にロードされる故本関数内でアドレス参照が行われる。module構造体で管理される。load_module関数はElfファーマットであるモジュールファイルを読み込んで、この構造体の各メンバに適切な設定を施す。スタティック変数modulesをヘッドとするリストにつなぐ。*gpl_symsメンバーである。先の__ksymtab_gpl内のシンボルはこのメンバーに設定される。*symsに設定される。モジュールが外部シンボルのアドレスを解決する必要があると、それがGPLライセンスとするモジュールならすべてのモジュールのgpl_symsを参照していくことでGPLライセンスにかかる機能を実現している。simplify_symbols()->resolve_symbol()->find_symbol()->each_symbol()となり、list_for_each_entryマクロでmodulesのリストをたどって全モジュールのシンボルをチェックしている。arr[]で、GPLライセンス等の有無によって、検索するアドレスが決定される。false;}補足get_modinfo関数はmodinfoセクションから引数で指定するキーの設定値を取得する。vermagicを指定してマジックナンバーを取得する。オプションを指定するとロード可能となる。カーネルにCONFIG_MODULE_FORCE_LOADを設定してコンパイルする必要あり。ノースAdsense広告情報が設定されていません。