"cat: ошибка записи: на устройстве не осталось места", когда я пишу на символьное устройство с помощью "cat"
Я пытаюсь использовать VS1053, аудиодекодер, в Linux 4.14 для воспроизведения музыки. Это устройство обменивается данными через шину SPI, и я разработал драйвер и зарегистрировал VS1053 как символьное устройство, спасибо за https://github.com/rvp-nl/vs10xx-linux. Вот и проблема.
Способ воспроизведения музыки:
cat musicfile.mp3 > /dev/VS1053_device
Когда закидываю на устройство музыкальный файл WAV, все ок, и музыка играет хорошо. Однако, когда я закидываю на устройство музыкальный файл в формате mp3, Linux выдает ошибку
cat: ошибка записи: на устройстве не осталось места
Я искал причину на многих сайтах. Многие говорили: проверьте свободное место и свободный индекс в файловой системе, но вот мой результат:
root@s32v234sbc:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/root 956592 10795 945797 2% /
devtmpfs 234285 308 233977 1% /dev
tmpfs 234333 205 234128 1% /run
tmpfs 234333 10 234323 1% /var/volatile
root@s32v234sbc:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 15G 412M 14G 3% /
devtmpfs 916M 0 916M 0% /dev
tmpfs 916M 84K 916M 1% /run
tmpfs 916M 28K 916M 1% /var/volatile
root@s32v234sbc:~#
Размер музыкального файла ограничен 100 МБ, пространство не может быть использовано.
Я попытался написать программу для печати файлов, заменяющую "кот", но это тоже не сработало. Понятия не имею, почему и как произошла эта ошибка.
Я очень благодарен, если кто-нибудь мог мне помочь в этом!!!
2 ответа
Попробуйте следующую команду:
tune2fs -l /dev/VS1053_device | grep -i reserved
И cat не подходит для выполняемой вами операции. В формате MP3 есть всевозможный мусор, который может скрываться в начале и в конце файла, и его необходимо удалить. Попробуйте использовать ffmpeg, mp3wrap или aplay
Похоже, проблема с драйвером, который вы используете. Когда вы получаете сообщение "На устройстве не осталось места", это не означает, что в данном случае локальная файловая система заполнена. Вероятно, это означает, что есть какая-то проблема на локальной или другой стороне шины SPI. Возможно, что используемый вами драйвер получает статус -ENOSPC от драйвера SPI из ядра Linux, но ваш драйвер не обслуживает эту ошибку должным образом. Так что нужно будет немного покопаться в используемом вами драйвере.