有没有办法将自己的RS232 AVR设备暴露为Linux文件系统设备,例如/dev/avr_device
?程序必须写成内核空间模块还是用户空间? libfuse
可以做到这一点吗?也许我应该使用FIFO管道作为设备的通信通道?
答案 0 :(得分:0)
为了能够安装已安装linux文件系统的设备,您需要将该设备作为块设备,但是串行设备是字符设备< / strong>,与此不相容。
为了能够在系统的经典视图中解决该问题,您需要开发一个块设备驱动程序,它附加到该char设备(串行端口)并使用它来控制de block设备仿真协议,意味着将块号和块数据转换成通过串行线路发送到另一侧的接收器的数据包实现作为某种存储设备的块设备细节。这可以通过一些努力来完成....问题是如果使用慢速串行线来模拟任何类型的存储都是有意义的。
最后一种方法的优点是你只需要模拟一个块设备,并且能够创建任何可用于linux的本地文件系统。
在更高的层次上,你可以实现一个文件系统类型,这是一个更高级别的抽象(fuse允许你这样做)但这使得这个问题更加困难,因为你必须实现每个文件系统原语(并且相信我,模块化文件系统远比块设备更原始,将每个远程基元实现为一组本地基元(这对单个程序员来说是不可行的)
第二种方法完全修复了文件系统的功能,并完全修复了您可以对文件执行的操作集到您编写的实现原语。它更加困难,并且通常与系统的其他部分缺乏一致性,因此我不建议您遵循这种方法。
第二种方法只有一个优点,它是:由于文件系统使用高级基元,因此可以更紧凑地编码到网络消息中,并通过线路更有效地传输,从而为慢速连接提供更高的速度。但是以必须实现所有文件系统功能为代价,并且在使用这些类型的文件系统时失去了统一性(您必须实现用户访问,安全性,请求缓存等)。
在第一种方法中,您只需实现4或5个原语,并获得可以在块设备上安装的任何文件系统的所有功能。