gpt4 book ai didi

linux - 内核驱动程序或用户空间驱动程序?

转载 作者:太空狗 更新时间:2023-10-29 11:44:37 32 4
gpt4 key购买 nike

我想就以下问题征求您的意见:我需要为omap3编写驱动程序,以便通过fpga(通过gpmc接口(interface))访问外部dsp。 dsp 需要将文件加载到 dsp,并从 dsp 读取/写入缓冲区。内核中已经有FPGA驱动。内核是2.6.32。所以我想到了以下方案:

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

编写与 fpga 内核驱动程序接口(interface)的用户空间驱动程序。

使用UIO编写用户空间驱动,不使用内核fpga驱动,而是访问fpga,作为用户空间单一完整dsp驱动的一部分。

您认为什么是首选?内核驱动程序相对于用户空间有何优势,反之亦然?

谢谢,冉

最佳答案

* 用户空间驱动程序:

  • 更易于调试。
  • 大量图书馆为您提供支持。
  • 允许您隐藏 IP 详细信息(如果您这样做,人们会非常讨厌您!)
  • 崩溃不会影响整个系统。
  • 处理中断的延迟更高,因为内核必须以某种方式将中断中继到用户空间。
  • 您无法从用户空间控制对您设备的访问。

* 内核空间驱动程序:

  • 更难调试。
  • 仅支持 linux 内核框架。
  • 您始终可以提供二进制 blob 来隐藏 IP 的详细信息,但这很烦人,因为它必须针对特定内核生成。
  • 崩溃会导致整个系统崩溃。
  • 减少处理中断的延迟。
  • 您可以控制从内核空间访问您的设备,因为它是所有进程都能看到的全局上下文。

作为一名内核工程师,我更喜欢在内核上下文中编写代码,这可能就是为什么我会在内核中编写整个驱动程序的原因。

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

例如:

  • 如果您的设备有一个共享资源(如 MMU、硬件 FIFO)并且您希望多个进程能够安全地使用它,那么您可能需要一些缓冲区管理器在内核中并且所有进程都将进行通信通过 ioctl 使用它。
  • 如果您的驱动程序需要尽可能快地响应中断(非常低的延迟),那么您需要将处理中断的代码部分放在内核中断处理程序中,而不是放在用户空间中,并且发生中断时通知用户空间。

关于linux - 内核驱动程序或用户空间驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848317/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com