用户空间程序如何与内核模块交互?

时间:2014-04-18 09:08:07

标签: linux audio linux-kernel

这个问题的动机是我试图弄清楚哪个内核模块是用于播放实际音频文件的命令aplay sound.wav。如果它使用库函数,则将其跟踪到库函数"。

我目前的理解是内核模块通过/dev中的设备文件为用户空间提供了一个接口。因此,我希望在源代码中的某个位置识别出发送到/dev/something的sound.wav的流。

这是对实际情况的过度简化吗?

2 个答案:

答案 0 :(得分:1)

ALSA的设备节点位于/dev/snd。打开单个设备节点的逻辑在libasound内,并遵循(可选)/etc/asoundrc~/.asoundrc中设置的规则。

我不确定这是否有助于您找到特定的内核模块。我使用aplay -L来识别所使用的硬件,然后使用lsmod来查看它是哪个模块。

答案 1 :(得分:0)

用户空间与内核交互的方式主要是您提到的设备文件和系统调用。还有其他像netlink,/sys等文件。

播放音频将通过设备文件完成,是的。但是,设备文件可能无法直接在应用程序中打开,它可能会使用库来执行此操作。在这种情况下,程序会打开/dev文件,但您不会在源代码中找到它。

另一种可能性是它使用声音服务器。在这种情况下,它根本不会打开/dev文件,它只是连接到声音服务器以让它完成这项工作。