1

我正在为自定义点对点通信设备(想想超级串行端口)创建一个驱动程序,我想知道我应该如何处理传出数据。具体来说,我应该允许它缓冲多少数据?

目前,我将传递给 write() 的缓冲区大小限制为我系统上的最大 16kb 或 4 页。我想标准数据会比这个少得多。我的写入函数 kmalloc() 为缓冲区提供了足够的内存并将其复制到内核空间。使用内置链表,我将数据排队等待 DMA 事务。我使用 dma_map_single() API 映射它。设备本身没有大缓冲区,因此它直接从 DMA 缓冲区传输数据。然后,当传输完成时,它会引发一个中断,我取消映射并释放它。

回到我的问题,鉴于每次用户执行写入时我都在执行 kmalloc(),我是否应该限制放入队列的缓冲区数量?还是我刚才描述的策略存在固有缺陷?

编辑以回答有关数据源的评论:不幸的是,我没有编写最终用户软件,因此我对原始数据源一无所知。我可以说输出数据速率并不是那么快(最大 256kbps),而且这个嵌入式系统的内存非常紧张。

4

0 回答 0