1
  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 文件中读取 WORKS OK,例如: $ sudo cat /sys/bus/i2c/devices/i2c-11/11-0050/eeprom | 十六进制转储-C。
  8. 但我无法写入 /sys/bus/i2c/devices/i2c-11/11-0050/eeprom 因为是只读的。为什么这个文件是只读的?

谢谢你。

佩奥

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

4

2 回答 2

0

看来 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,
};
于 2018-09-25T08:07:28.340 回答
0

一个问题是您使用的 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

于 2019-02-21T17:41:56.763 回答