我打算在Linux内核上编写一个新的设备驱动程序。我打算写的设备将是一个设备,它将数据传入另一台计算机,相同的设备。编写一个新的Linux设备驱动程序
因此,在短期的设备将是可读/写,并应通过network.I沟通知道这听起来像一个插座,但想法是实现壳接口,这样,如果你键入
[email protected]$ echo "Hi" >> mydevice
会将Hi这个词传送给网络另一端的系统(并可能将其配置为存储文件)。
这是一个闲暇时间的项目,我打算做的,这听起来很像插座等现有implementations.Well关于设计,设备实现的问题是:
- 我应该使用块或字符设备?我看到的块设备的优点是,如果我是通过设备启动完整的文件传输(以后我会倾向于支持),那么速度会很快。
- 如何在网络上写入数据?我熟悉套接字和东西,但在内核中使用套接字会带来性能问题(我在某处读过套接字,毕竟套接字是设计用于用户空间的)。是否使用netfilter或其他东西工作?也许制作数据包直接会帮助:-)?任何创新都是值得欢迎的
- 如何配置驱动程序,比如如何让它知道它应该连接到用户空间程序中的特定主机,我们通常通过配置文件完成此操作,但要更改驱动程序的连接设置你如何管理它? (sysfs ??坦率地说,我从来没有使用过sysfs或proc /)
- 现在,因为设计规定所有的文件传输都在内核空间中。当我通过内核空间传输大量数据时,它会减慢系统吗?这个设计不应该让系统过载,在一个预先优化的内核中这样做会有所帮助,但是我还应该注意其他一些特性,以使设计尽可能高效(我正在使用最新的Linux内核) ?
- 我不想留下巨大的内存印记,所以有什么办法可以在传输数据时减少它,可能是在磁盘上缓存数据?
- 我将不得不设计一个用户空间程序来协调驱动程序不是我吗?我不能让司机独自完成整个任务,那将是单调乏味的。
经过大量的代码和文档之后,我想不出比Linux中的Network Filesystem实现更好的东西。实际上,我的每一个需求都是由这个完成的(除了可能是内核空间部分,不知道nfs如何在这方面工作)。所以现在我已经得出结论,在Linux中构建一个字符驱动程序,它将完成上述几乎所有的任务。所以问题1下。 – Malice