"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, но ваш драйвер не обслуживает эту ошибку должным образом. Так что нужно будет немного покопаться в используемом вами драйвере.

Другие вопросы по тегам