我使用“ioremap”映射Ti AM3359数据表中GPIO端口的地址。 代码运行良好。映射虚拟地址到物理地址的含义是什么?
问题:
1>的问题是,为什么我们需要映射虚拟地址到物理地址的? 是因为物理地址是我们想要访问的硬件的真实地址吗?
2>如果以上情况属实,那么为什么数据表不能直接给出物理地址。
3>“ioremap”返回的物理地址在不同RAM的RAM不同的情况下会不同?
我使用“ioremap”映射Ti AM3359数据表中GPIO端口的地址。 代码运行良好。映射虚拟地址到物理地址的含义是什么?
问题:
1>的问题是,为什么我们需要映射虚拟地址到物理地址的? 是因为物理地址是我们想要访问的硬件的真实地址吗?
2>如果以上情况属实,那么为什么数据表不能直接给出物理地址。
3>“ioremap”返回的物理地址在不同RAM的RAM不同的情况下会不同?
至于你的第一个问题,你使用ioremap
的原因是因为内核的地址空间不符合物理地址空间。您需要将物理页面映射到虚拟地址空间,以便能够解决它们。这是ioremap
所做的。
至于你的第二和第三个问题,我不知道你的数据表给出或不给。 :)
通常情况下,我希望硬件数据表给出物理地址,除非物理地址必须被发现或通过总线特定的机制配置。你的实际指定是什么,如果不是这样的话?
您可能想要了解更多信息,请阅读this。
感谢您的精彩解说:) –
我们使用中的地址数据表作为ioremap的输入,所以它只能是虚拟地址?(实际上数据表中给出的地址总是偏移量) –
不,这意味着它实际上是一个物理地址。 'ioremap'给你一个虚拟地址。是什么让你觉得它不是? – Dolda2000
你是对的,我也证实了这一点,但事情是,为什么我们需要虚拟地址来访问任何硬件? –