linux-2.6.25/__EXPORT_SYMBOL()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#a5f90f4e]
#backlinks
*説明 [#c33c9997]
-パス: [[linux-2.6.25/include/linux/module.h]]
-関数や変数の名前をカーネルのシンボルテーブルに登録する。
--他のモジュールから名前が見えるようになる。
--関数内で宣言しても正常に動作しない。
**引数 [#r2408d46]
-sym
--カーネルのシンボルテーブルに登録したいシンボルを指定す...
-sec
--シンボルテーブルを表すセクション(__ksymtab)に追加する...
---今のところ "_gpl", "_gpl_future" が使われている。
**返り値 [#td8d0b41]
-なし
**参考 [#g79384e7]
#ifndef __GENKSYMS__
-__GENKSYMS__ が宣言されていないときに有効である。
--[[linux-2.6.25/__GENKSYMS__]]
*実装 [#f9fac02b]
#define __EXPORT_SYMBOL(sym, sec) ...
extern typeof(sym) sym; ...
-シンボルがオブジェクト外部にあるかもしれないと宣言(exte...
これによって別のオブジェクトで定義されている関数もリンク...
エクスポートできる。たぶん。
--なのでエクスポート専用のソースファイルが書けるはずです。
--typeof は gcc の拡張構文で、指定した変数の型を表す。
__CRC_SYMBOL(sym, sec) ...
-
--[[linux-2.6.25/__CRC_SYMBOL()]]
static const char __kstrtab_##sym[] ...
-ここからステートメント開始 ----------
-シンボル名を定義する。
--## はトークン連結演算子で、トークン同士を繋いで一つのト...
--例えば __EXPORT_SYMBOL(hogehoge, "") なら sym に hogeho...
ことになるので、__kstrtab_hogehoge[] が宣言される。
__attribute__((section("__ksymtab_strings"))) ...
-__attribute__ ディレクティブは gcc の拡張構文である。
コンパイラへの命令を書く場合に用いる。
-上記の変数を __ksymtab_strings セクションに置きなさい、
とコンパイラに伝える。
= MODULE_SYMBOL_PREFIX #sym; ...
-ここまでが 1つのステートメント ----------
-# はトークンを文字列リテラルに変換する演算子である。
プリプロセッサがシンボル名を勝手に " " で囲ってくれると思...
-MODULE_SYMBOL_PREFIX は "" である。
-連続する文字列リテラルは連結される(C の規則)ので、
例えば sym => hogehoge だとすると生成される文字列は "hoge...
--MODULE_SYMBOL_PREFIX はアーキテクチャ依存で、asm/module...
--参考
asm-blackfin/module.h:#define MODULE_SYMBOL_PREFIX "_"
asm-h8300/module.h:#define MODULE_SYMBOL_PREFIX "_"
asm-v850/module.h:#define MODULE_SYMBOL_PREFIX "_"
static const struct kernel_symbol __ksymtab_##sy...
-ここからステートメント開始 ----------
-シンボルテーブルの要素を定義する。
__used ...
-__attribute__( (__used) ) を理解できない古いコンパイラの...
--最適化で消されないため、そして「変数/関数が未使用」の警...
__attribute__((section("__ksymtab" sec), unused)...
-__ksymtab セクションに配置する。
sec に何か渡した(例: hoge)場合はその名前を
連結したセクション(例: __ksymtabhoge)に配置される。
-unused でも used でも同じはずだが、古い gcc(3.4 未満)...
変数に対して __attribute__( (used) ) を宣言できないらしい。
--この辺りはよくわかりません。正直どうでもいい…。
= { (unsigned long)&sym, __kstrtab_##sym }
-ここまでが 1つのステートメント ----------
-シンボルテーブルの 1要素を定義する。
--シンボルへのポインタと、シンボルの名前が入る。
--[[linux-2.6.25/kernel_symbol]]
-まとめ
--sym: エクスポートすべきシンボル
--__kstrtab_##sym: カーネルが使うシンボルの名前 -> __ksym...
--__ksymtab_##sym: シンボルテーブルの要素(シンボルのポイ...
*コメント [#g834e5c7]
終了行:
*参照元 [#a5f90f4e]
#backlinks
*説明 [#c33c9997]
-パス: [[linux-2.6.25/include/linux/module.h]]
-関数や変数の名前をカーネルのシンボルテーブルに登録する。
--他のモジュールから名前が見えるようになる。
--関数内で宣言しても正常に動作しない。
**引数 [#r2408d46]
-sym
--カーネルのシンボルテーブルに登録したいシンボルを指定す...
-sec
--シンボルテーブルを表すセクション(__ksymtab)に追加する...
---今のところ "_gpl", "_gpl_future" が使われている。
**返り値 [#td8d0b41]
-なし
**参考 [#g79384e7]
#ifndef __GENKSYMS__
-__GENKSYMS__ が宣言されていないときに有効である。
--[[linux-2.6.25/__GENKSYMS__]]
*実装 [#f9fac02b]
#define __EXPORT_SYMBOL(sym, sec) ...
extern typeof(sym) sym; ...
-シンボルがオブジェクト外部にあるかもしれないと宣言(exte...
これによって別のオブジェクトで定義されている関数もリンク...
エクスポートできる。たぶん。
--なのでエクスポート専用のソースファイルが書けるはずです。
--typeof は gcc の拡張構文で、指定した変数の型を表す。
__CRC_SYMBOL(sym, sec) ...
-
--[[linux-2.6.25/__CRC_SYMBOL()]]
static const char __kstrtab_##sym[] ...
-ここからステートメント開始 ----------
-シンボル名を定義する。
--## はトークン連結演算子で、トークン同士を繋いで一つのト...
--例えば __EXPORT_SYMBOL(hogehoge, "") なら sym に hogeho...
ことになるので、__kstrtab_hogehoge[] が宣言される。
__attribute__((section("__ksymtab_strings"))) ...
-__attribute__ ディレクティブは gcc の拡張構文である。
コンパイラへの命令を書く場合に用いる。
-上記の変数を __ksymtab_strings セクションに置きなさい、
とコンパイラに伝える。
= MODULE_SYMBOL_PREFIX #sym; ...
-ここまでが 1つのステートメント ----------
-# はトークンを文字列リテラルに変換する演算子である。
プリプロセッサがシンボル名を勝手に " " で囲ってくれると思...
-MODULE_SYMBOL_PREFIX は "" である。
-連続する文字列リテラルは連結される(C の規則)ので、
例えば sym => hogehoge だとすると生成される文字列は "hoge...
--MODULE_SYMBOL_PREFIX はアーキテクチャ依存で、asm/module...
--参考
asm-blackfin/module.h:#define MODULE_SYMBOL_PREFIX "_"
asm-h8300/module.h:#define MODULE_SYMBOL_PREFIX "_"
asm-v850/module.h:#define MODULE_SYMBOL_PREFIX "_"
static const struct kernel_symbol __ksymtab_##sy...
-ここからステートメント開始 ----------
-シンボルテーブルの要素を定義する。
__used ...
-__attribute__( (__used) ) を理解できない古いコンパイラの...
--最適化で消されないため、そして「変数/関数が未使用」の警...
__attribute__((section("__ksymtab" sec), unused)...
-__ksymtab セクションに配置する。
sec に何か渡した(例: hoge)場合はその名前を
連結したセクション(例: __ksymtabhoge)に配置される。
-unused でも used でも同じはずだが、古い gcc(3.4 未満)...
変数に対して __attribute__( (used) ) を宣言できないらしい。
--この辺りはよくわかりません。正直どうでもいい…。
= { (unsigned long)&sym, __kstrtab_##sym }
-ここまでが 1つのステートメント ----------
-シンボルテーブルの 1要素を定義する。
--シンボルへのポインタと、シンボルの名前が入る。
--[[linux-2.6.25/kernel_symbol]]
-まとめ
--sym: エクスポートすべきシンボル
--__kstrtab_##sym: カーネルが使うシンボルの名前 -> __ksym...
--__ksymtab_##sym: シンボルテーブルの要素(シンボルのポイ...
*コメント [#g834e5c7]
ページ名: