2011-10-12 28 views
7

私は、ARMv7チップの一部のカーネルモード専用機能(具体的にはキャッシュコントロール)へのユーザスペースアクセスを提供するために、小さなカーネルモジュールを作っています。私はを読んでいます。Corbet、Rubini、HartmanのLinuxデバイスドライバです。その中には、完全なドライバ+デバイス+バスの作り方が記述されています。私はバスドライバーをまったく作りたくありません。実際、私が作っている 'ドライバ'は、実際にはデバイスの定義とまったくマッチする必要はありません。プラットフォームのCPUに暗黙的にマッチします。誰でも私に説明することができます:sysfsによるLinuxドライバへのアクセス

  1. ここでsysfsは私の属性にする必要がありますか?それは私のモジュールエントリ/sysfs/modules/mymoduleの下にあるべきですか? /sys/devices/platformも有望であると思われますので、/sys/devices/system/cpuもそうです。
  2. kobject /属性を置くべき既存の場所がある場合は、どうすればそれに接続できますか?必要なのはどうすれば入手できますかkset?私が見たすべての例はksetを作成し、kobjectからリンクしています - 既存のksetという名前のAPIを見たことがありませんか?

申し訳ありませんが、本当にわかりやすく簡単に見つかった例が何らかの理由で見つからない場合は、申し訳ありません。誰もこれにどのような光を当てることができますか?

答えて

8

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

これはプラットフォームドライバですか?どんなバスにも適合しないドライバーとして、それは良いフィット感のようです。プラットフォームドライバは/ sys/devices/platformの下に独自のディレクトリを作成し、そこに属性を持つことができます。属性としてtemp1_crit,temp1_crit_alarm,temp1_inputなどを有するdrivers/hwmon/coretemp.cを見てください。 (__ATTR()?)で属性を作成し、配列をすべて列挙し、attribute_groupを定義し、の関数をprobe()に登録して、の登録をremove()関数で登録解除します。

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

+0

私はcoretemp.cドライバを見ていきます。ありがとう! –

+0

更新 - coretempモジュールは完璧なテンプレートでした。私はいくつかのsysfs属性がきれいに働いています。再度、感謝します。 –

関連する問題