我正在为自定义点对点通信设备(想想超级串口)创建驱动程序,我想知道如何处理传出数据。具体来说,我应该允许它缓冲多少数据?
目前,我将传递给write()的缓冲区大小限制为最多16kb或4个页面。我认为标准数据会明显少于此。我的写函数kmalloc()为缓冲区提供了足够的内存并将其复制到内核空间。使用内置链表,我将数据排队以进行DMA事务。我使用dma_map_single()API映射它。设备本身没有大缓冲区,因此它直接从DMA缓冲区传输数据。然后,当传输完成时,它会引发一个中断,我取消映射并释放它。
回到我的问题,假设每次用户执行写操作时我都是kmalloc(),我应该限制放入队列的缓冲区数量吗?或者我刚刚描述的策略是否存在固有的缺陷?
编辑以回答有关数据源的评论:不幸的是,我不是在编写最终用户软件,因此我对原始数据源一无所知。我可以说传出数据速率并不是那么快(最大256kbps),而且这个嵌入式系统的内存非常紧张。