Linux kernel 在重新映射的地址范围内分配内存

Linux kernel 在重新映射的地址范围内分配内存,linux-kernel,embedded-linux,Linux Kernel,Embedded Linux,我正在编写一个字符驱动程序,它的作用是桥接b/w邮箱框架,并为用户空间应用程序公开FOP。 用户应用程序使用此字符驱动程序将数据传送到远程处理器。然而,一个要求是远程处理器希望数据在固定的内存范围内。该范围提供给probe()fn中的char drv。 我可以使用提供的addr范围的memremap(),如果只有一个用户应用程序,我可以使用它,但在我目前的情况下,我有多个应用程序试图将数据缓冲区发送到远程核心。 因此,我需要在特定内存范围内分配内核缓冲区,然后在接收到的每个数据缓冲区上从_use

我正在编写一个字符驱动程序,它的作用是桥接b/w邮箱框架,并为用户空间应用程序公开FOP。 用户应用程序使用此字符驱动程序将数据传送到远程处理器。然而,一个要求是远程处理器希望数据在固定的内存范围内。该范围提供给probe()fn中的char drv。 我可以使用提供的addr范围的memremap(),如果只有一个用户应用程序,我可以使用它,但在我目前的情况下,我有多个应用程序试图将数据缓冲区发送到远程核心。 因此,我需要在特定内存范围内分配内核缓冲区,然后在接收到的每个数据缓冲区上从_user()复制_,然后将物理addr传递到远程内核(arm m0+)

Linux内核中是否有API执行这种分配

任何关于这方面的建议都将非常感激和有用。提前感谢您的建议/问题


ps:remote core提供的内存地址范围是2GB范围内的RAM地址(0x8000_0000-0xFFFF_FFFF)

远程处理器的内核驱动程序应该序列化访问并提供固定内存区域。您看过mempool框架了吗?请参阅感谢@0andriy,但是对于每个应用程序的请求,远程处理器都必须分配内存,并且还必须保持分配。我不希望m0+内核保持分配和释放内存。我觉得远程核心将要运行小型RTOSThanks@sawdust,这将是一个负担过重的问题,我实际上在这里找到了通用分配器(genalloc)。所以,基本上,m0内核提供了一个固定范围的内存。在Linux端,我执行memremap()并使分配生效。但是,我遇到了其他缓存问题。m0内核正在对内存进行未缓存访问,而Linux端正在进行缓存访问,我可以使用缓存刷新API,但我正在寻找“如何在Linux上映射未缓存的RAM内存”
memremap_uc()