LINUX.ORG.RU

Самописный dd не пишет в /dev/mtd


0

1

Есть у меня буфер, нужно его записать в /dev/mtd4, а оставшуюся часть раздела нулями забить. Делаю так:

    static const int dataBlockSize = 8192;
    int mtdBlockFd = open( "/dev/mtd4", O_WRONLY | O_CREAT | O_TRUNC, 0666 );
    int bytesWritten = 0;
    while( bytesInBufLeft > dataBlockSize )
    {
      bytesWritten = safe_write( mtdBlockFd, bufPtr, dataBlockSize );
      bytesInBufLeft -= bytesWritten;
      bufPtr += bytesWritten;
    }

    if( (bytesInBufLeft - dataBlockSize) > 0 )
    {
      bytesWritten = safe_write( mtdBlockFd, bufPtr, bytesInBufLeft - dataBlockSize );
    }

    do
    {
      static const char zeroBuf[dataBlockSize] = {0};
      bytesWritten = safe_write( mtdBlockFd, zeroBuf, dataBlockSize );
    } while( bytesWritten > 0);

safe_write подсмотрел, в dd, когда с просто write не работало, но и это не помогло:

int safe_write(int fd, const void *buf, int count)
{
  int n;

  do {
    n = write(fd, buf, count);
  } while (n < 0 && errno == EINTR);

  return n;
}

Кто-нибдудь что-нибудь подобное делал? В чем может быть косяк? Если вместо /dev/mtd4 имя простого файла указать, то в него все нормально пишется.

★★

И как именно не работает: вылетает с ошибкой; не пишет; пишет, но не то?

Gvidon ★★★★
()
Ответ на: комментарий от Gvidon

это не суть, просто же еще и для файла обычного тестил. А баг был в том, что забыл close сделать =)

kulti ★★
() автор топика

Зачем это надо, если есть mtd-utils/flash_erase flashcp?

Можно посмотреть туда, если обязательно надо встроить в свой код

vasily_pupkin ★★★★★
()
Ответ на: комментарий от vasily_pupkin

Ага, спасибо. На flash_erase я уже сам набрел, а flashcp пока еще не видел.

kulti ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.