“cat: write error: No space left on device” when I write to a character device using “cat”


I am trying to use VS1053, an audio decoder, on Linux 4.14 to play music. This device communicate through SPI bus, and I've developed a driver and registered VS1053 as a character device, thanks for https://github.com/rvp-nl/vs10xx-linux. Here comes the problem.

The way to play music is:

cat musicfile.mp3 > /dev/VS1053_device

When I throw a WAV music file to the device, everything is ok, and music plays well. However, when I throw a mp3 music file to the device, Linux casts an error

cat: write error: No space left on device

I've searched for the reason on many sites. Many said, check free space and free inode on file system, but this is my result:

[email protected]:~# 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                          
[email protected]:~# 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                             
[email protected]:~# 

The music file is limited within 100MB, there is no way that the space is used up.

I tried to write an print file program to substitute "cat", but that doesn't work either. I have no idea why and how this error happened.

I am super grateful if anyone could help me on this!!!


Answers:


try the below command:

 tune2fs -l /dev/VS1053_device | grep -i reserved

And cat is not suitable for the operation you are performing.The MP3 format has all sorts of junk that can lurk at the front and end of the file and this needs to be strippe out.Try with ffmpeg or mp3wrap or aplay