【发布时间】:2020-04-02 09:50:02
【问题描述】:
我正在尝试在 Linux 4.14 上使用音频解码器 VS1053 来播放音乐。该设备通过SPI总线通信,我已经开发了驱动程序并将VS1053注册为字符设备,感谢https://github.com/rvp-nl/vs10xx-linux。问题来了。
播放音乐的方式是:
cat musicfile.mp3 > /dev/VS1053_device
当我将 WAV 音乐文件扔到设备上时,一切正常,音乐播放良好。但是,当我将 mp3 音乐文件扔到设备上时,Linux 会抛出错误
cat:写入错误:设备上没有剩余空间
我在很多网站上都搜索过原因。许多人说,检查文件系统上的可用空间和可用 inode,但这是我的结果:
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:~#
音乐文件被限制在 100MB 以内,空间是不会用完的。
我尝试编写一个打印文件程序来代替“cat”,但这也不起作用。我不知道为什么以及如何发生此错误。
如果有人能帮助我,我非常感激!!!
【问题讨论】:
-
命令
ls -l /dev/VS1053_device的输出是什么?查看代码,我认为设备路径名应该类似于“/dev/vs10xx-0”。 -
@Ian Abbott 您的命令输出是:crw------- 1 root root 245, 0。您的名字是对的,我的“VS1053_device”是“vs10xx-0” .我只修改了名字。
-
抱歉,但在 Stack Overflow 上,我们希望有问题的代码位于 问题帖子 本身,而不是链接。此外,我们希望您执行一些调试,因此生成的代码应采用minimal reproducible example 的形式。您可以在
vs10xx_write函数中插入一些printk语句,以找出它返回ENOSPC的原因。如果这是某个内核函数返回的值,请询问该函数。
标签: linux-device-driver space cat device-driver inode