簡體   English   中英

Linux內核設備驅動程序中的分散 - 收集列表

[英]scatter-gather list in Linux kernel device driver

我正在開發一個可以訪問分散 - 收集列表(sg)元素的設備驅動程序。 我可以從中提取數據並使用sg_copy_to_buffer將其存儲在已分配的緩沖區中。 現在,我的想法是創建一個新的分散列表,並從這個緩沖區復制到我創建的新分散列表中(當然這是后來完成的)並將這個新的分散列表返回給內核。 (這是針對性能指標等)我嘗試在線搜索文檔以使用散點列表等,但無濟於事。 我通常在做什么:

char *buffer = kmalloc (***);
struct scatterlist *sglist = kmalloc (sizeof (struct scatterlist)...);
sg_init_one(sglist, buffer, BUFFER_SIZE);

sg_copy_to_buffer (inp_sglist, inp_sglist_len, buffer);

*** Later ***
sg_copy_from_buffer (sglist, 1, buffer);

是否有一個很好的文檔來幫助我將散點列表映射到虛擬緩沖區? 我試過看http://lwn.net/Articles/256368/ http://www.linuxjournal.com/article/7104等。

任何幫助或指針將不勝感激!

通常,用戶在其虛擬內存中分配緩沖區,然后調用設備驅動程序。 當用戶發出寫入時,您將獲得具有寫入數據的緩沖區的sglist,並在sg_copy_to_buffer()中使用它。 當用戶發出讀取時,您將獲得讀取數據緩沖區的sglist,並在sg_copy_from_buffer()中使用它。

本文描述了從I / O請求獲取sglist的調用。 這是一篇很好的文章,但差不多10歲。 許多x86系統現在都有一個IOMMU來支持硬件虛擬化。

通常,設備驅動程序使用sglist生成設備I / O操作列表,一個用於sglist條目中每個不相交的數據塊,而不是將數據復制到本地緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM