Linux i2c eeprom /sys/bus/i2c/...../eeprom файл только для чтения - PullRequest
0 голосов
/ 25 сентября 2018
  1. У меня есть процессор X86 с пользовательским I2C Master Harware.Мой Linux - Ubuntu 14.04, ядро ​​3.13.
  2. Я написал драйвер I2c для своего пользовательского основного оборудования I2C.
  3. Когда я загружаю свой драйвер, устройство / sys / bus / i2c / devices / i2c-11 создано.
  4. Прикреплено к моей шине I2C память EEPROM I2C.
  5. Когда я загружаю драйвер EEPROM Linux, файл sys / 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, потому что только для чтения.Почему этот файл создан ТОЛЬКО ДЛЯ ЧТЕНИЯ? *

Спасибо.

Peio

PD: Я попытался выполнить chmod файл eeprom в rwx, но в любом случае я получаюошибка при попытке записи в eeprom: «bash: eeprom: в доступе отказано».

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Одной из проблем является то, что используемый вами драйвер eeprom.c не поддерживает запись в eeprom, поскольку у него нет функции записи.

Попробуйте вместо этого использовать драйвер at24.c.Он имеет функции для записи, например, at24_eeprom_write ()

Фактически, функция probe () этого драйвера будет определять, доступна ли запись для записи, или нет, а затем настраивать вызовы функций по мере необходимости, когда она доступна для записи.,И функция записи недоступна, когда часть доступна только для чтения.Он позаботится об этом автоматически.

Вот код драйвера at24.c для v3.3 ядра linux, как вы указали: https://elixir.bootlin.com/linux/v3.3/source/drivers/misc/eeprom/at24.c

0 голосов
/ 25 сентября 2018

Похоже, что драйвер eeprom Linux реализует только драйверы / 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,
};
...