from ここ
48 struct snd_card *snd_cards[SNDRV_CARDS];
49 EXPORT_SYMBOL(snd_cards);
私はそれが何を意味するのか、なぜそれが使われるのかを得ていません。私はそれについて検索しようとしましたが、その意味を理解していませんでした。
動的にロードされたモジュールからシンボルにアクセスできるようにします(モジュールがextern
宣言を追加する場合)。
少し前まで、 誰かがそれの使い方を尋ねました 。
それ自体は答えではなく、私のコメントから約束されているように、シンボルをエクスポートするデモンストレーションでしたではない非静的である必要があります。以下の2つのモジュールはこれを示しています。
/* mod1.c */
#include <linux/module.h>
static int mod1_exp_func(int i)
{
pr_info("%s:%d the value passed in is %d\n",
__func__, __LINE__, i);
return i;
}
EXPORT_SYMBOL(mod1_exp_func); /* export static symbol */
static int __init mod1_init(void)
{
pr_info("Initializing simple mod\n");
return 0;
}
static void __exit mod1_exit(void)
{
pr_info("This module is exiting\n");
}
module_init(mod1_init);
module_exit(mod1_exit);
MODULE_LICENSE("GPL v2");
そして2番目のモジュール
/* mod2.c */
#include <linux/module.h>
extern int mod1_exp_func(int);
static int __init mod2_init(void)
{
pr_info("Initializing mod2\n");
pr_info("Calling exported function in mod1\n");
mod1_exp_func(3);
return 0;
}
static void __exit mod2_exit(void)
{
pr_info("mod2 exiting\n");
}
module_init(mod2_init);
module_exit(mod2_exit);
MODULE_LICENSE("GPL v2");
これらはCentOS 6およびCentOS 7でテストされました:カーネル2.6.32および3.10(それぞれ)。 mod1.koをロードしてからmod2.koをロードすると、mod1_exp_func()に渡される値がカーネルログバッファーに出力されます。