系统相关
首页 > 系统相关> > Linux-为什么模块从地址0xbf000000开始

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

作者:互联网

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

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

解决方法:

实际上,所有内核代码都驻留在虚拟地址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子目录下的Documentation目录中的某个位置,在这里是寻找其他体系结构此类问题的答案的好地方:-)

标签:device-driver,arm,linux-kernel,linux
来源: https://codeday.me/bug/20191102/1993677.html