繁体   English   中英

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

[英]Linux i2c eeprom /sys/bus/i2c/…/eeprom file is read only

  1. 我有一个带有自定义I2C主硬件的X86 CPU。 我的Linux是Ubuntu 14.04,内核3.13。
  2. 我为自定义I2C主硬件编写了I2c驱动程序。
  3. 当我加载驱动程序时,将创建设备/ sys / bus / i2c / devices / i2c-11。
  4. I2C eeprom存储器连接到我的I2C总线。
  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 | 十六进制转储-C。
  8. 但是我无法写入/ sys / bus / i2c / devices / i2c-11 / 11-0050 / eeprom,因为它是只读的。 为什么创建此文件为只读?

谢谢。

io

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

看来eeprom Linux驱动程序仅实现driver / 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,
};

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM