用户空间程序如何与内核模块交互?
Posted
技术标签:
【中文标题】用户空间程序如何与内核模块交互?【英文标题】:How do userspace programs interact with kernel moduels? 【发布时间】:2014-04-18 09:08:06 【问题描述】:这个问题的动机是我试图弄清楚aplay sound.wav
与哪个内核模块进行通信以播放实际的音频文件。如果它使用了库函数,则追踪到库函数”。
我目前的理解是内核模块通过/dev
中的设备文件提供了一个到用户空间的接口。因此,我希望在源代码中的某处识别一个来自 sound.wav 的流,该流被发送到/dev/something
。
这是对真实情况的过度简化吗?
【问题讨论】:
【参考方案1】:ALSA 的设备节点位于/dev/snd
。打开单个设备节点的逻辑在 libasound 中,并遵循(可选)/etc/asoundrc
或 ~/.asoundrc
中设置的规则。
我不确定这是否有助于您找到特定的内核模块。我会使用aplay -L
来识别所使用的硬件,然后使用lsmod
来查看它是哪个模块。
【讨论】:
【参考方案2】:用户空间与内核交互的方式主要是你提到的设备文件和系统调用。还有其他的,例如 netlink、/sys
中的文件等等。
播放音频将通过设备文件完成,是的。但是,设备文件可能无法直接在应用程序中打开,它可以使用库来执行此操作。在这种情况下,程序确实会打开 /dev
文件,但您不会在源代码中找到它。
另一种可能性是它使用了声音服务器。在这种情况下,它根本不会打开 /dev
文件,它只是连接到声音服务器以让它完成这项工作。
【讨论】:
以上是关于用户空间程序如何与内核模块交互?的主要内容,如果未能解决你的问题,请参考以下文章