Linux – 在内核代码中映射用户空间内存

我写了一段代码,需要在SOCclosures之前存储位于特定物理地址的10k内存。

我的问题是这个物理地址不是内核空间的一部分,所以我必须创build一个ad -hoc内存映射,所以我可以访问这个内存空间。

我尝试使用io-remap,但它不(显然)工作在非内核空间。

有没有这样做的API? 我应该使用kmap吗?

提前致谢

听起来像内存映射外设。 为了紧密地绑定到你的内核,它会把条目添加到initdata中去到iotable_init()。 例如arch / arm / mach-vexpress / ct-ca9x4.c ct_ca9x4_io_desc []。 这就创建了虚拟到物理的映射。 然后内核代码可以用写虚拟地址写虚拟地址。

找到答案

关键是使用vmap函数为给定的页面表创建一个映射。 问题是如何初始化一个页表结构到一个特定的物理地址,但它似乎也存在一个API

这里是一个分配单个页面的例子

 void *virt_addr_ptr struct page **my_page = kmalloc(sizeof (*my_page), GFP_KERNEL); my_page = phys_to_page(phys_addr_ptr); virt_addr_ptr = vmap(my_page, 1, VM_MAP, PAGE_KERNEL); /*now its possible to access this space */ memcpy(store_buffer, virt_addr_ptr, store_size);