2012-06-23 49 views
3

我打算在Linux内核上编写一个新的设备驱动程序。我打算写的设备将是一个设备,它将数据传入另一台计算机,相同的设备。编写一个新的Linux设备驱动程序

因此,在短期的设备将是可读/写,并应通过network.I沟通知道这听起来像一个插座,但想法是实现壳接口,这样,如果你键入

[email protected]$ echo "Hi" >> mydevice 

会将Hi这个词传送给网络另一端的系统(并可能将其配置为存储文件)。

这是一个闲暇时间的项目,我打算做的,这听起来很像插座等现有implementations.Well关于设计,设备实现的问题是:

  1. 我应该使用块或字符设备?我看到的块设备的优点是,如果我是通过设备启动完整的文件传输(以后我会倾向于支持),那么速度会很快。
  2. 如何在网络上写入数据?我熟悉套接字和东西,但在内核中使用套接字会带来性能问题(我在某处读过套接字,毕竟套接字是设计用于用户空间的)。是否使用netfilter或其他东西工作?也许制作数据包直接会帮助:-)?任何创新都是值得欢迎的
  3. 如何配置驱动程序,比如如何让它知道它应该连接到用户空间程序中的特定主机,我们通常通过配置文件完成此操作,但要更改驱动程序的连接设置你如何管理它? (sysfs ??坦率地说,我从来没有使用过sysfs或proc /)
  4. 现在,因为设计规定所有的文件传输都在内核空间中。当我通过内核空间传输大量数据时,它会减慢系统吗?这个设计不应该让系统过载,在一个预先优化的内核中这样做会有所帮助,但是我还应该注意其他一些特性,以使设计尽可能高效(我正在使用最新的Linux内核) ?
  5. 我不想留下巨大的内存印记,所以有什么办法可以在传输数据时减少它,可能是在磁盘上缓存数据?
  6. 我将不得不设计一个用户空间程序来协调驱动程序不是我吗?我不能让司机独自完成整个任务,那将是单调乏味的。
+0

经过大量的代码和文档之后,我想不出比Linux中的Network Filesystem实现更好的东西。实际上,我的每一个需求都是由这个完成的(除了可能是内核空间部分,不知道nfs如何在这方面工作)。所以现在我已经得出结论,在Linux中构建一个字符驱动程序,它将完成上述几乎所有的任务。所以问题1下。 – Malice

回答

1

看看linux内核中的tun/tap driver,我认为它会满足你的需求。

+1

Tun/tap是一个网络设备。但是我想创建一个字符/块设备。有些部分仍然适用谢谢 – Malice

+1

tun/tap像char设备和网络设备一样查看用户空间。所以你可以通过char设备将数据写入tun/tap,并且它将像内核网络一样在内核中进行处理。这不是,你想要什么? –

相关问题