Linux i2c eeprom /sys/bus/i2c/...../eeprom文件是只读的

时间:2018-09-25 07:51:07

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

  1. 我有一个带有自定义I2C主硬件的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驱动程序时,eeprom驱动程序会自动创建sys文件/ sys / bus / i2c / devices / i2c-11 / 11-0050 / 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,因为它是只读的。为什么创建此文件为只读?。

谢谢。

Peio

P.D:我尝试将eeprom文件chmod更改为rwx,但是无论如何,我都会收到尝试写入eeprom的错误消息:“ bash:eeprom:权限被拒绝”。

2 个答案:

答案 0 :(得分: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,
};

答案 1 :(得分:0)

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

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

实际上,此驱动程序的probe()函数将确定零件是否可写,然后在需要写入时按需要调用setup函数。当零件为只读时,写入功能不可用。它会自动处理此问题。

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