2010-03-09 38 views
0

我對Linux設備驅動程序編程非常陌生,但出於調試目的,我想直接將數據流寫入文件。或者,我應該提出不同的問題:將數據流式傳輸到Linux設備驅動程序中的文件

我有一個片上系統,其中一個模塊提供一個數據流。該模塊必須用寫地址初始化。我不想將數據寫入內存,而是想將數據流重定向到該地址的文件。這也可以通過用戶空間來完成,因爲不建議在內核空間寫入文件。

有人可以粗略地描繪如何做到這一點?

感謝,斯特凡

回答

0

從你的問題,我想這是一個硬件模塊直接寫入到內存緩衝區。您將始終需要在文件路徑上使用中間內存緩衝區,但在設備驅動程序中有多種方式可以對其進行管理。

最簡單的情況是實現一個字符設備驅動程序,它通過讀取操作將數據返回給用戶空間。寫入文件的用戶空間應用程序可以像cat一樣簡單。您的模塊將寫入由驅動程序分配的內存緩衝區,並且read方法會將數據從此緩衝區複製到用戶空間緩衝區。這在內核文檔和Linux Device Drivers(LDD)中由DMA-Mapping.txt覆蓋。

如果數據速率很高(其中與設備性能相關的數據速率較高),則需要考慮更先進的讀取操作,即將read請求的頁面鎖定到內存中,並將模塊直接寫入這些頁面。這更加複雜,LDD在這方面的文檔相當陳舊。我建議研究內核中視頻捕獲驅動程序的來源以瞭解這一點。

如果您的驅動程序有更多種類的通信執行,您可能需要使用Netlink

+0

感謝您的意見。它將從一個char設備開始,但可能最終會有更復雜的東西,因爲數據流相當高。 – stefangachter 2010-03-11 15:17:06

相關問題