gpt4 book ai didi

Linux 内核 IIO 事件 sysfs 文件只可读

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:25 26 4
gpt4 key购买 nike

我有一个问题,我为上升和下降阈值注册了 IIO 事件。我可以在事件子文件夹中看到 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),
}
};

最佳答案

finding: it works when I change the permissions of the in_temp_thresh_rising_value file to 666 via sudo. But why is it not created with this permissions via IIO subsystem?

这是 sysfs 文件的常见做法,因为写入这些文件会改变系统的行为,甚至危及或破坏系统。因此,如果您想写入这些文件,您应该从 root 执行,或者将您的用户添加到相应的组,或者更改该文件模式(通过 udev 规则或手动)。

这是在 IIO 代码中是如何完成的:

  • IIO sysfs 节点名称源自 drivers/iio/industrialio-event.c 中的下一个表: iio_ev_type_textiio_ev_dir_textiio_ev_info_text
  • 接下来是节点创建路径:iio_device_add_event() -> __iio_add_chan_devattr() -> __iio_device_attr_init()
  • 正在 __iio_device_attr_init() 中设置 sysfs 节点的文件模式:

    • 用于阅读:dev_attr->attr.mode |= S_IRUGO;

      • 所以每个用户都可以读取节点(因为S_IRUGO允许读取用户用户,G组和其他其他人)
    • 用于写入:dev_attr->attr.mode |= S_IWUSR;

      • 所以它只能由 root 写入(因为 S_IWUSR 只允许文件所有者写入,即 root)

关于Linux 内核 IIO 事件 sysfs 文件只可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com