7

ARMv7 チップの一部のカーネル モードのみの機能 (具体的にはキャッシュ制御) へのユーザー空間アクセスを提供する小さなカーネル モジュールを作成しています。Corbet、Rubini、および Hartman によるLinux Device Driversを読んでいます。その中で、完全なドライバー+デバイス+バスの作成方法が説明されています。バスドライバーをまったく作成したくありません。実際、私が作成している「ドライバー」は、デバイス定義と一致する必要はまったくありません。プラットフォームの CPU と暗黙的に一致しています。誰でも私に説明できますか:

  1. sysfs のどこに属性を配置すればよいですか? の下のモジュールエントリにあるはず/sysfs/modules/mymoduleですか? /sys/devices/platformも有望に思え/sys/devices/system/cpuます。
  2. /attributesを配置する既存の場所がある場合、そこkobjectにどのようにプラグインすればよいですか? 必要なものを入手するにはどうすればよいksetですか? 私が見たすべての例は、を作成し、既存の名前付きを要求するための API を見たことがないksetからリンクします。kobjectkset

これが信じられないほど明白である場合、または何らかの理由で私が発見していない、本当に簡単で簡単に発見できる例がどこかにある場合は申し訳ありません。誰でもこれに光を当てることができますか?

4

1 に答える 1

8

私はsysfsをあまり扱っていませんが、あなたがやっていることとかなり似ている単純な例を見つけました(当然、ARMの下でもあります)。arch/arm/mach-omap1/pm.c、具体的にはidle_show/ idle_storesysfs ファイルを見てください。sysfs_create_file()これは ( を使用して) として登録され/sys/power/sleep_while_idle、グローバル/sys/powerkobj ( で定義include/linux/kobject.h) を使用します。使用できるグローバル kobj がいくつか定義されていますが、ドライバーに適したものはないと思います。

これはプラットフォーム ドライバーになりますか? どのバスの下にも収まらないドライバーとしては、ぴったりのようです。プラットフォーム ドライバーは、/sys/devices/platform の下に独自のディレクトリを取得し、そこに属性を持つことができます。、、などを属性としてdrivers/hwmon/coretemp.c持っている を見てください。かなり単純に見えます: 属性を作成し (おそらく? で)、それらをすべて配列にリストし、 を定義し、関数で登録し、関数で登録解除します。temp1_crittemp1_crit_alarmtemp1_input__ATTR()attribute_groupsysfs_create_group()probe()sysfs_remove_group()remove()

sysfs_create_group他の例が必要な場合は、属性を定義する他のプラットフォーム ドライバーがおそらく存在します ( を検索してください)。お役に立てれば!

于 2011-10-13T08:00:54.330 に答える