从用户空间模拟字符设备

从用户空间模拟字符设备

我们目前正在致力于构建一个针对不同传感器的数据可视化系统。

为了使 Linux 应用程序的开发成为可能,我们需要模拟不同字符设备的行为,因为设备驱动程序和硬件设计尚未完成。

那么有没有一种方法可以接收对某个特定文件的系统调用(例如,也从用户空间运行的 C 程序)?

                                   read()
(Userspace Application/Database) <========= (~/mydev) <===== (dummy_driver)

答案1

你可以使用库塞 用户空间中的字符设备这是保险丝库,在大多数系统中作为包提供。 “驱动程序”的示例是库斯.c。当您编译并运行此示例时:

sudo ./cuse -f --name=mydevice

它创建/dev/mydevice并接收所有对其的 open、close、read、write、ioctl 调用。要“卸载”设备(用保险丝术语),只需终止该进程即可。

该示例可能尚未分发,因此要编译、下载(或 git 克隆)压缩,切换到该libfuse/example目录,并编译,如 C 文件所示:

gcc -Wall cuse.c $(pkg-config fuse --cflags --libs) -o cuse -I.

您可能需要安装一个fuse-devel软件包或类似的软件包才能正常工作。如果您需要实现更多 ioctl,请查看此关联给定作为对答案的评论这个的堆栈交换问题。

可以考虑的更简单的替代方案是伪 tty普蒂, 或者终端0终端这是一个将两个串行端口连接在一起的内核模块。

相关内容