2013-05-30 64 views
4

我正在開發嵌入在具有Linux內核2.6.33的Virtex4 FPGA中的PowerPC 405。到目前爲止,我一直以內核可加載模塊的形式爲在FPGA中實現的平臺設備編寫驅動程序。設備使用平面打開固件設備樹文件進行註冊。要創建一個設備文件,我使用OF功能獲取設備節點,然後註冊一個新的miscdevice,然後自動註冊一個次要設備編號併爲我創建設備文件。這也創建嵌入miscdevice(即miscdevice.this_device)的device將現有的Linux設備結構與設備文件相關聯

現在的問題是我需要執行DMA操作。我嘗試使用miscdevice.this_device調用dma_alloc_coherent()函數,但該設備未與任何總線關聯,並始終返回錯誤。我做了一些挖掘,結果發現struct of_device也嵌入了struct device(即of_device.dev)。當我嘗試使用dma_alloc_coherent()時,它工作得很好。

因此,現在我有兩個不同的struct device結構,一個用於管理我的字符設備文件,另一個用於管理底層Open Firmware系統調用,總線和DMA事務。當然這些設備在sysfs中並沒有相互關聯。

我的問題是,是否有可能以某種方式請求爲我從OF層獲得的device結構創建設備文件,而不是使用Misc Device API創建新設備?這樣一切都將與單一的device結構相關聯。

+0

這不就是Linux內核2.6.33嗎? –

+0

@PeterL。是的,謝謝。固定! –

+0

如何在'/ dev /'下使用'register_chrdev()'註冊字符設備,並使用現有的'of_device.dev'作爲其他內容?... – TheCodeArtist

回答

3

我認爲你對dma_alloc_coherent()的修正是正確的。

但我認爲使用嵌入在結構of_device中的設備結構來替換您創建的miscdevice是不對的。 of_device是Open Firmware數據庫中對象的描述。並且根據Linux設備驅動程序模型,設備結構被嵌入到Linux Kernel中的各種設備對象中。我認爲你註冊miscdevice作爲一個字符設備,應該有file_operations結構關聯。

總而言之,它們是不同的意見,它們不能相互替代。

+0

嗯,在我看來,如果是這樣的話,那麼應該是將總線與字符設備相關聯的一種方式。順便說一句,我沒有結婚的misc開發API。我只用它,因爲它很方便。如果有另一個API允許我這樣做,我很樂意聽到它。 –