gpt4 book ai didi

linux - 将物理地址映射到虚拟地址linux

转载 作者:IT王子 更新时间:2023-10-29 00:26:46 25 4
gpt4 key购买 nike

我正在开发一个小型嵌入式系统。当我的 linux 启动到用户空间时,我知道我的设备在物理内存中的位置。我想将它们映射到用户空间虚拟地址。目前,我正在通过内核模块来完成它。我使用 vmalloc/kmalloc(取决于大小),然后在返回的虚拟地址上使用 ioremap_page_range 来映射我的物理地址。我认为那不是正确的做法。首先,我正在分配内存,然后我要求内核将该虚拟地址空间重新映射到一些不同的物理地址空间。 (最初在 vmcall/kmalloc 中映射物理-> 虚拟有点没用,因为我不关心那些物理页面。这绝对不好。)

除此之外,还有一种更好的方法可以将已知的物理内存映射到用户空间进程。 (我知道除了我的用户空间进程,没有人会触及那段内存。)

谢谢

最佳答案

您正在尝试做的是访问所谓的IO 内存。我只能鼓励您阅读 Linux 设备驱动程序 (LDD) 一书,更具体地说是第 9 章。

要“分配”这样一个区域,你需要调用

struct resource *request_mem_region(unsigned long start, unsigned long len, char *name)

.在您的驱动程序可以访问它之前,您必须为其分配一个虚拟地址,这是通过调用

void *ioremap(unsigned long phys_addr, unsigned long size)

为确保您的驱动程序随后可以在不同的体系结构/平台上工作,请务必对这些区域(ioread8/16/32 或 iowrite8/16/32 及其所有变体)使用一些访问函数。

关于linux - 将物理地址映射到虚拟地址linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11621911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com