2014-07-20 174 views
1

我想問你的建議如下:我需要編寫驅動程序omap3,通過fpga訪問外部dsp(通過gpmc接口)。 dsp需要將文件加載到dsp,並從dsp讀取/寫入緩衝區。內核中已經有FPGA驅動程序。內核是2.6.32。所以我想到了以下選項:內核驅動程序或用戶空間驅動程序?

在內核中寫入dsp驅動程序,該驅動程序使用現有的fpga驅動程序。

編寫與fpga內核驅動程序接口的用戶空間驅動程序。

寫的用UIO用戶空間的驅動程序,這將不使用FPGA內核驅動程序,但應做訪問FPGA,爲用戶空間單,完整的DSP驅動程序的一部分。

您認爲什麼是首選選項? 內核驅動程序相對於用戶sace有什麼優勢,反之亦然?

感謝,冉

回答

2

*用戶空間的驅動程序:

  • 更容易調試。
  • 加載庫以支持您。
  • 允許你隱藏你的IP的細節如果你想(人們會真的恨你,如果你這樣做的話)
  • 崩潰不會影響整個系統。
  • 由於內核必須以某種方式將中斷中繼到用戶空間,所以處理中斷的延遲更大。
  • 您無法控制從用戶空間訪問您的設備。

*內核空間的驅動程序:

  • 難以調試。
  • 只支持Linux內核框架。
  • 您可以隨時提供二進制的blob隱藏自己的IP的細節,但是這很煩人,因爲它必須針對特定內核生成的。
  • 崩潰將導致整個系統。
  • 處理中斷的延遲較少。
  • 您可以從內核空間控制對設備的訪問,因爲它是所有進程都能看到的全局上下文。

作爲一名內核工程師,我在內核環境中更加舒適/快樂的黑客代碼,這可能就是爲什麼我會在內核中編寫整個驅動程序。

但是,我要說的是做的最好的事情就是你的驅動程序的功能劃分爲單位,只有把單元的內核時,有一個理由這樣做。

例如:

  • 如果您的設備有一個共享的資源(如一個MMU,硬件FIFO),並且希望多個進程能夠安全地使用它,那麼很可能你需要一些緩衝經理進入內核,所有進程將通過ioctl與它進行通信。
  • 如果您的驅動程序需要儘可能快地響應中斷(非常低的延遲),那麼您需要將處理中斷的代碼部分放在內核中斷處理程序中,而不是放在用戶空間中,當中斷髮生時通知用戶空間。
+0

非常感謝您的優秀解釋 – ransh