首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核驱动还是用户空间驱动?

内核驱动还是用户空间驱动?
EN

Stack Overflow用户
提问于 2014-07-20 07:26:57
回答 1查看 1.2K关注 0票数 2

我想请教您以下几点:我需要为omap3编写驱动程序,以便通过fpga (通过gpmc接口)访问外部dsp。dsp需要将文件加载到dsp上,并从dsp中读取/写缓冲区。内核中已经有FPGA驱动程序。内核是2.6.32。因此,我想到了以下几种选择:

在内核中编写dsp驱动程序,使用现有的fpga驱动程序。

编写一个与fpga内核驱动程序接口的用户空间驱动程序。

使用UIO编写用户空间驱动程序,这将不使用内核fpga驱动程序,而是完成对fpga的访问,作为用户空间的一部分单独完成dsp驱动。

你认为什么是更好的选择?内核驱动程序相对于用户sace的优势是什么,反之亦然?

谢谢,Ran

EN

回答 1

Stack Overflow用户

发布于 2014-07-20 18:14:45

*用户空间驱动程序:

  • 更容易调试。

  • 大量的库来支持你。

  • 允许你隐藏你的IP的细节,如果你想(人们会真的恨你,如果你!)

  • 坠机不会影响整个系统。

  • 处理中断的延迟较高,因为内核将不得不以某种方式将中断中继到用户空间。

  • 无法从用户空间控制对设备的访问。

*内核-空间驱动程序:

  • 更难调试。

  • 只支持linux内核框架。

  • 您总是可以提供二进制blob来隐藏IP的详细信息,但是这很烦人,因为它必须针对特定的内核生成。

  • 一次崩溃就会摧毁整个系统。

  • 处理中断的延迟较少。

  • 您可以从内核空间控制对设备的访问,因为它是所有进程都看到的全局上下文。

作为一名内核工程师,我对内核上下文中的黑客代码比较满意,这可能就是为什么我会在内核中编写整个驱动程序的原因。

但是,我要说的是,最好的做法是将驱动程序的功能划分为多个单元,并且只有在有理由这样做时才将其放入内核中。

例如,

  • 如果您的设备有一个共享资源(比如MMU、硬件FIFO ),并且希望多个进程能够安全地使用它,那么您可能需要在内核中使用某个缓冲区管理器,并且所有进程都将通过ioctl与其通信。
  • 如果您的驱动程序需要尽可能快地响应中断(非常低延迟),那么您将需要将处理中断的代码部分放在内核中断处理程序中,而不是将其放入用户空间并在中断发生时通知用户空间。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24848317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档