为什么模块从地址0xbf000000开始

时间:2011-04-13 09:48:32

标签: linux linux-kernel arm device-driver

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

BTW它在ARM平台上。

1 个答案:

答案 0 :(得分:4)

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

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

要完全了解Arm中的内容,请参阅此文档:http://www.arm.linux.org.uk/developer/memory.txt

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