LinuxドライバプログラミングにおけるEXPORT_SYMBOL()の使用方法

EXPORT_SYMBOL()は、シンボル(関数、変数など)を他のモジュールで使用できるようにモジュールのインターフェースとしてエクスポートするためのマクロです。

Linux ドライバープログラミングで、EXPORT_SYMBOL() マクロを使用する手順は次のとおりです。

  1. エクスポートする記号、例えば関数や変数をドライバソースファイルに定義する。
  2. 定義したシンボルをエクスポートするには、ドライバソースファイルで EXPORT_SYMBOL() マクロを使用します。

例えば、関数のmy_function()エクスポートされる必要がある、ドライバソースファイルdriver.cが存在するとします。

#include <linux/module.h>

void my_function(void)
{
    // do something
}

EXPORT_SYMBOL(my_function);

最初にドライバのソースファイルにmy_function()関数を定義し、EXPORT_SYMBOLマクロを利用して外部に公開します。

エクスポートされた関数my_function()は、他のモジュールからも利用可能です。他のモジュールは、このドライバのヘッダファイルをインクルードし、その関数をexternキーワードで宣言するだけで済みます。

#include <linux/module.h>

extern void my_function(void);

static int __init my_module_init(void)
{
    // 使用my_function()函数
    my_function();

    return 0;
}

static void __exit my_module_exit(void)
{
    // 模块退出时的处理
}

module_init(my_module_init);
module_exit(my_module_exit);

上記コードでは、他のモジュールで extern キーワードを使用して my_function() 関数を宣言し、初期化関数内でその関数を呼び出しました。

EXPORT_SYMBOL()マクロはカーネル空間にシンボルをエクスポートするために使用するもので、ユーザー空間のドライバプログラミングでは使用できません。

bannerAds