fre*_*hat 3 c drivers kernel devices
我们目前正在致力于构建一个针对不同传感器的数据可视化系统。
为了使 Linux 应用程序的开发成为可能,我们需要模拟不同字符设备的行为,因为设备驱动程序和硬件设计尚未完成。
那么有没有一种方法可以接收对某个特定文件的系统调用(例如,也从用户空间运行的 C 程序)?
read()
(Userspace Application/Database) <========= (~/mydev) <===== (dummy_driver)
Run Code Online (Sandbox Code Playgroud)
您可以在用户空间中使用cuse 字符设备,它是熔丝库的一部分,在大多数系统中作为包提供。“驱动程序”的一个示例是cuse.c。当您编译并运行此示例时:
sudo ./cuse -f --name=mydevice
Run Code Online (Sandbox Code Playgroud)
它创建/dev/mydevice并接收所有对其的 open、close、read、write、ioctl 调用。要“卸载”设备(用保险丝术语),只需终止该进程即可。
该示例可能未分发,因此要编译,下载(或 git clone) zip ,更改到libfuse/example目录,然后编译,如 C 文件所示:
gcc -Wall cuse.c $(pkg-config fuse --cflags --libs) -o cuse -I.
Run Code Online (Sandbox Code Playgroud)
您可能需要安装一个fuse-devel软件包或类似的软件包才能正常工作。如果您需要实现更多 ioctl,请查看作为对此stackexchange问题的答案的评论给出的链接。
可以考虑的更简单的替代方案是伪 tty pty或tty0tty,它是一个将两个串行端口连接在一起的内核模块。