我们目前正在致力于构建一个针对不同传感器的数据可视化系统。
为了使 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,请查看此关联给定作为对答案的评论这个的堆栈交换问题。