【问题标题】:why does the module start from address 0xbf000000为什么模块从地址 0xbf000000 开始
【发布时间】:2011-08-04 13:45:31
【问题描述】:

我使用insmod hello.ko 来启动我构建的模块。并使用lsmod 查找此模块。然后我发现了一个奇怪的问题,我看到模块从地址 0xbf000000 开始。据我所知,内核地址从0xc0000000开始,驱动模块是内核的一部分,但它的地址在用户空间。这很奇怪。

顺便说一句,它在 ARM 平台上。

【问题讨论】:

  • 那是哪个平台? arm x86 x86_64 ppc?不同平台的虚拟地址可能有很大不同...
  • @gby ARM,内核空间也应该从0xc0000000开始

标签: linux linux-kernel arm device-driver


【解决方案1】:

所有内核代码驻留在虚拟地址 0xc0000000 的方案实际上仅限于 x86,甚至仅在使用用户空间和内核之间 3:1 内存地址分割的默认配置选项时才存在。

在 Arm 上,虚拟内存空间寻址方案不同,内核可加载模块从常量 TASK_SIZE 映射到 PAGE_OFFSET-1,其中 PAGE_OFFSET 是物理内存直接 1:1 映射开始的地址。

要全面了解 Arm 的发展方向,请参阅此文档:http://www.arm.linux.org.uk/developer/memory.txt

它还位于 Linux 内核的文档目录中 Arm 子目录下的某个位置,这是为其他架构寻找此类问题的答案的好地方 :-)

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 2017-02-27
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多