我有一个设备驱动程序,它使用 RAM 中的缓冲区,我希望用户能够映射到用户空间。我已经阅读了http://lwn.net/images/pdf/LDD3/ch15.pdf,其中谈到了使用 nopages,但那里的示例仅使用单页并说您可以调整使用次数以使其适用于多页。我不明白这是怎么回事。它使用顺序为 0 的 get_free_page(即 1 个空闲页面)来分配其缓冲区,但我的缓冲区有两页长。
使用计数与什么有什么关系?据我了解,只计算第一页。
我有一个设备驱动程序,它使用 RAM 中的缓冲区,我希望用户能够映射到用户空间。我已经阅读了http://lwn.net/images/pdf/LDD3/ch15.pdf,其中谈到了使用 nopages,但那里的示例仅使用单页并说您可以调整使用次数以使其适用于多页。我不明白这是怎么回事。它使用顺序为 0 的 get_free_page(即 1 个空闲页面)来分配其缓冲区,但我的缓冲区有两页长。
使用计数与什么有什么关系?据我了解,只计算第一页。
我相信这些页面在内存中必须是连续的。然后通过调用remap_pfn_range()
(2.6 内核)或remap_page_range()
(2.4 内核),页面可以被内存映射到用户空间。
几年前,我为设备驱动程序做了这个。我相信我使用这个网站作为指南:http ://www.scs.ch/~frey/linux/memorymap.html