ioremap在物理地址上失败

时间:2014-12-31 16:01:30

标签: c linux-kernel arm

我有一个ARM目标。

我需要读出一个实际地址。 该地址是parralel NOR flash rom中的一个位置。 rom直接在地址总线上。

如果我创建一个模块:

   if ((rmap = ioremap(ROM_BASE, ROM_SIZE)) == NULL)
{
    printk(KERN_ERR "Mapping ROM failed\n");
    return -1;
}

(使用基数0x40000000大小0x100) 如果失败: [1091.270686]映射ROM失败 insmod:插入'rom.ko'时出错:-1不允许操作

在这种情况下,目标没有/ dev / mem ... 但是对于不同的内核,它有...并且阅读相同的地址工作。 所以地址是正确和可读的。

由于

1 个答案:

答案 0 :(得分:2)

手臂上的ioremap最终使用mtype = MT_DEVICE调用__arm_ioremap_pfn_caller,这可能会以多种方式失败:

  • 地址不得定义为RAM地址(请检查meminfo)
  • 该过程可能超出VM空间(不太可能)
  • 可能没有免费的页面表条目(取决于架构)

有关ARM内存分配的更多信息,请检查this page