1

上昇しきい値と下降しきい値の IIO イベントを登録したという問題があります。events サブフォルダーに sysfs ファイルが表示され、それらを読み取ることができますが、新しいしきい値を書き込もうとすると、「許可が拒否されました」と表示されます。

次のセットアップ:

static const struct iio_event_spec as6200_events[] = {
  {
    .type = IIO_EV_TYPE_THRESH,
    .dir = IIO_EV_DIR_RISING,
    .mask_separate = BIT(IIO_EV_INFO_VALUE),
  }, {
    .type = IIO_EV_TYPE_THRESH,
    .dir = IIO_EV_DIR_FALLING,
    .mask_separate = BIT(IIO_EV_INFO_VALUE),
  }
};

static const struct iio_chan_spec as6200_channels[] = {
  {
    .type = IIO_TEMP,
    .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
      BIT(IIO_CHAN_INFO_PROCESSED) |
      BIT(IIO_CHAN_INFO_SCALE),
    .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ),
    .event_spec = as6200_events,
    .num_event_specs = ARRAY_SIZE(as6200_events),
  }
};
4

2 に答える 2

3

発見:in_temp_thresh_rising_valueファイルのアクセス許可を666viaに変更すると機能しますsudo。しかし、IIO サブシステムを介してこの権限で作成されないのはなぜですか?

これらのファイルに書き込むと、システムの動作が変更され、システムが危険にさらされたり壊れたりする可能性があるため、これは sysfs ファイルの一般的な方法です。したがって、これらのファイルに書き込みたい場合は、ルートから行うか、ユーザーを対応するグループに追加するか、そのファイルモードを (udev ルールまたは手動で) 変更する必要があります。

IIO コードでの実行方法は次のとおりです。

  • IIO sysfs ノード名は、drivers/iio/industrialio-event.cの次iio_ev_type_textのテーブルから派生iio_ev_dir_textします。iio_ev_info_text
  • ノード作成パスは次のとおりです: iio_device_add_event()-> __iio_add_chan_devattr()->__iio_device_attr_init()
  • sysfs ノードのファイル モードは__iio_device_attr_init()で設定されています。

    • 読むために:dev_attr->attr.mode |= S_IRUGO;

      • したがって、すべてのユーザーがノードを読み取ることができます (ユーザー、グループS_IRUGOおよびその他の読み取り許可されるため)
    • 書き込み用:dev_attr->attr.mode |= S_IWUSR;

      • そのため、ルートのみが書き込むことがS_IWUSRできます(ルートであるファイル所有者にのみ書き込みが許可されるため)
于 2016-08-03T15:51:29.660 に答える