2011-11-22 85 views
1

我正在計劃一個小型的愛好項目,在帶有GPIO的SBC上的Linux上運行。我的想法是在GPIO引腳上產生PWM輸出,並允許每個引腳作爲/dev中的文件提供,與GPIO引腳相同。我希望能夠以GPIO工作的相同方式使用PWM器件。我應該爲此寫一個設備驅動程序嗎?

所以我想我想寫一個設備驅動程序,它似乎符合法案。

唯一的問題是,由於我將通過/dev/GPIO訪問引腳,因此我的程序可以存在於用戶空間中。而'可以在用戶空間存在'通常意味着'應該存在於用戶空間'。

我確定這可以寫成用戶空間守護進程或內核空間設備驅動程序或其他東西。

什麼是最好的事情?

回答

1

這取決於SBC上微控制器的內置功能。如果你確定在其架構中沒有建立PWM模塊,那麼我想你需要轉換一個GPIO引腳才能做到這一點。

This project may be of interest.

+0

我不[一定]想找到預先寫好的東西。我的問題是關於這是否應該成爲設備驅動程序。 – Joe

+0

與驅動腳本相比,使用驅動程序可能可以實現更高分辨率的PWM輸出。 – buster

+0

如果你在談論這門語言,我很可能會用C語言寫下它。我的問題是「我應該寫內核模式代碼嗎?」。該語言與該問題無關。 – Joe

1

對這一問題的最簡單的方法是從用戶空間通過 「的/ dev/MEM」文件直接訪問設備。在這種情況下,您不需要在內核空間區域編寫任何驅動程序代碼。使用「/ dev/mem」文件,您可以直接使用用戶空間應用程序的物理地址訪問設備。

在用戶空間應用初始設置是:

  • 打開 「的/ dev/MEM」 在讀寫模式文件(使用open()系統調用)。
  • 內存將「/ dev/mem」文件描述符與設備物理地址偏移量一起映射到進程虛擬內存地址空間(使用mmap()系統調用)。
  • 開始使用設備的虛擬地址(mmap()返回 值)訪問設備。

有這個辦法涉及爲通過「的/ dev/MEM」文件是沒有內存管理的知識訪問設備風險。其他方法將爲您的設備在內核空間安裝一個設備驅動程序,然後編寫用戶空間應用程序,這將是一個安全的設備訪問。

+0

謝謝,我會研究這一點。 – Joe