【问题标题】:Linux i2c eeprom /sys/bus/i2c/...../eeprom file is read onlyLinux i2c eeprom /sys/bus/i2c/...../eeprom 文件是只读的
【发布时间】:2018-09-25 07:51:06
【问题描述】:
  1. 我有一个带有定制 I2C Master Harware 的 X86 CPU。我的 Linux 是 Ubuntu 14.04,内核 3.13。
  2. 我为我的自定义 I2C 主硬件编写了一个 I2c 驱动程序。
  3. 当我加载驱动程序时,会创建设备 /sys/bus/i2c/devices/i2c-11。
  4. 连接到我的 I2C 总线有一个 I2C eeprom 内存。
  5. 当我加载 linux eeprom 驱动程序时,系统文件 /sys/bus/i2c/devices/i2c-11/11-0050/eeprom 由 eeprom 驱动程序自动创建。
  6. 问题:此文件 /sys/bus/i2c/devices/i2c-11/11-0050/eeprom 是只读的。
  7. 从 eeprom 文件读取工作正常,例如:$ sudo cat /sys/bus/i2c/devices/i2c-11/11-0050/eeprom | hexdump -C。
  8. 但我无法写入 /sys/bus/i2c/devices/i2c-11/11-0050/eeprom,因为它是只读的。为什么这个文件是只读的?。

谢谢。

佩奥

P.D:我尝试将 eeprom 文件 chmod 到 rwx,但无论如何我在尝试写入 eeprom 时收到错误消息:“bash: eeprom: Permission denied”。

【问题讨论】:

    标签: linux linux-kernel kernel-module i2c eeprom


    【解决方案1】:

    看来eeprom Linux驱动只实现了drivers/misc/eeprom/eeprom.c读取sysfs属性:

    https://github.com/torvalds/linux/blob/master/drivers/misc/eeprom/eeprom.c#L117

    static const struct bin_attribute eeprom_attr = {
        .attr = {
            .name = "eeprom",
            .mode = S_IRUGO,
        },
        .size = EEPROM_SIZE,
        .read = eeprom_read,
    };
    

    【讨论】:

    • 感谢您的回复。
    • 还有另一个驱动来读/写 I2C eeprom 的吗?在 ARM 环境中使用设备树,/sys/.../eeprom 文件是读/写的。例如:&i2c0 { eeprom:eeprom@50 { compatible = "at,24c32";注册 = ; }; };是否可以在 X86 环境中具有相同的配置?如果设备树不存在。
    • 我不知道,可能。还要查看使用 i2c-dev 的用户空间驱动程序 - 你可能会更幸运地找到这些驱动程序。
    • @Peio,您之前的问题中有 cmets,请阅读。附言并将内核更新到 v4.19。
    【解决方案2】:

    一个问题是您使用的 eeprom.c 驱动程序不支持写入 eeprom,因为它没有写入功能。

    考虑改用驱动程序 at24.c。它具有写作功能,例如 at24_eeprom_write()

    实际上,这个驱动的probe()函数会判断该部分是否可写,然后在可写时根据需要设置函数调用。当部件为只读时,写入功能不可用。它会自动处理这个问题。

    这里是 linux 内核 v3.3 的 at24.c 驱动程序的代码,如您所指:https://elixir.bootlin.com/linux/v3.3/source/drivers/misc/eeprom/at24.c

    【讨论】:

    • 正如你指出的迈克,使用 at24 驱动程序我解决了@ransh 的问题。有关如何使用 at24 驱动程序的更多信息:link
    • 谢谢,很高兴为您提供帮助。那么,您认为这是解决方案吗?
    • 解决方案是使用 at24 解释 here
    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多