2017-12-04 3 views
0

私はLinuxカーネルドライバを開発中です。要件の一部は、システム上のACPIデバイスのリストを取得し、それを反復することです。次のコードはユーザモードで動作しますが、カーネルではコンパイルされません。LinuxカーネルドライバでACPIデバイスのリストを取得するにはどうすればよいですか?

#include <dirent.h> 
#include <stdio.h> 

int main(void) 
{ 
    DIR   * d; 
    struct dirent * dir; 
    d = opendir("/sys/bus/acpi/devices"); 

    if (d) 
    { 
     while ((dir = readdir(d)) != NULL) 
     { 
     printf("%s\n", dir->d_name); 
     } 

     closedir(d); 
    } 

    return 0; 
} 

カーネルでACPIデバイスのリストを取得するのと同じ機能がありますか?

+1

カーネル[ACPIに関するドキュメント](https://elixir.free-electrons.com/linux/latest/source/Documentation/acpi)を読み、[ACPIドライバコード](https:// elixir .free-electrons.com/linux/v4.15-rc2/source/drivers/acpi)、例えば 'acpi_walk_namespace'関数で起動します。 – nowaqq

+0

最後に取得したいリストの種類によって異なります。 – 0andriy

答えて

0

カーネルで使用されていないlinux userspaceヘッダーファイルと関数を使用して記述したコード。 Linuxカーネルには、デバイスを扱う独自の方法があります。

カーネルの場合:ACPI実装では、バスの背後にあるデバイス(プラットフォーム、SPIおよびI2C)を列挙し、物理デバイスを作成し、それらをACPI名前空間のACPIハンドルにバインドします。フルカーネルテキストhereを読んでください。

関連する問題