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