编写新的Linux设备驱动程序

时间:2012-06-23 06:29:31

标签: network-programming linux-kernel linux-device-driver

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

因此,简而言之,设备将是可读/可写的并且应该通过网络进行通信。我知道它听起来像一个套接字但是想法是在shell中实现一个接口,这样如果你输入

    root@host$ echo "Hi" >> mydevice 

会将单词Hi传输到网络另一侧的系统(并可将其配置为存储在文件中)。

这是我打算做的休闲时间项目,听起来很像套接字和其他已经存在的实现。有关设备实现设计的问题是:

<击>

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

1 个答案:

答案 0 :(得分:0)

看看Linux内核中的tun/tap driver,我认为它将满足您的需求。

相关问题