加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux内核设备驱动程序中的分散 – 收集列表

发布时间:2020-12-13 23:24:59 所属栏目:Linux 来源:网络整理
导读:我正在开发一个可以访问分散 – 收集列表(sg)元素的设备驱动程序.我可以从中提取数据并使用sg_copy_to_buffer将其存储在已分配的缓冲区中. 现在,我的想法是创建一个新的分散列表,并从这个缓冲区复制到我创建的新分散列表中(当然这是后来完成的)并将这个新的
我正在开发一个可以访问分散 – 收集列表(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条目中每个不相交的数据块,而不是将数据复制到本地缓冲区.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读