c - 内核中的映射地址

标签 c linux-kernel arm linux-device-driver

我对用于将寻址的设备 IO 映射到内核的虚拟内存中的 ioremap 有基本的疑问。

我想知道如果从 ioremap 返回的地址被传递给像 virt_to_phys() 这样的例程,它会返回设备 IO 地址吗?

谢谢

最佳答案

virt_to_phys() 仅对内核线性映射中的虚拟地址有效,因为它只是一些快速地址算法,而不是完整的软件表遍历。线性映射通常只覆盖 RAM。然而,ioremap() 返回的虚拟地址通常(可能总是,但我没有耐心检查每个实现)是一个 vmalloc 地址,所以如果你将它传递给 virt_to_phys() 你会得到废话。

关于c - 内核中的映射地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38760947/

相关文章:

c - 释放内存时如何在 gdb 中得到通知?

c - 如何在内核中记录大量数据

optimization - ARM 上的快速浮点到 int 转换和浮点精度 (iPhone 3GS/4)

batch-file - 有没有办法在没有 keil 而是一些脚本的情况下构建 arm 项目?

c - 检索 PID 时 pclose 随机出现段错误

c - 我的 Vigenere 加密程序中出现段错误

c - 使用 "while"检查是否有空行C

c - 在路径中找不到程序 g++

linux - 一个多线程进程的线程ID可以和另一个正在运行的进程的进程ID相同吗?

linux - 启动时从本地文件夹加载 Linux 内核模块