我使用insmod hello.ko
启动我构建的模块。并使用lsmod
查找此模块。然后我发现一个奇怪的问题,我看到模块从地址0xbf000000开始。众所周知,内核地址从0xc0000000开始,驱动程序模块是内核的一部分。但是它的地址在用户空间中。这个退出奇怪。
BTW它在ARM平台上。
答案 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目录中的某个位置,这是寻找其他架构的问题答案的好地方: - )