内核oops消息 - 地址

时间:2012-10-19 17:10:06

标签: debugging linux-kernel

在内核学习过程中,我有两个问题:

1)我想知道内核Oops消息中显示的地址是虚拟还是物理? (我认为那些应该是虚拟的,因为长CPU运行虚拟地址空间并进行MMU重映射?)

2)我的平台是基于ARM的,它支持MMU,但是当我查看内核模块的加载时,我看到了:

# cat /sys/module/mydrv/sections/.data
0xbf00b4f4
# cat /sys/module/mydrv/sections/.text
0xbf006000

这些地址不应该像0xffffffffa0110000,0xffffffff011b948吗?我的意思是在我的理解中虚拟内存地址应该更大,从而提供更大的虚拟地址空间?我再次成为新手,当然不完全理解VM和MMU:)

感谢您的评论,谢谢。

标记

1 个答案:

答案 0 :(得分:2)

1)我想知道内核Oops消息中显示的地址是虚拟还是物理? (我认为那些应该是虚拟的,因为长CPU运行虚拟地址空间并进行MMU重映射?)

OOPS /恐慌堆栈跟踪中显示的地址都是虚拟的

2)那些地址不应该像0xffffffffa0110000,0xffffffff0011b948吗?我的意思是在我的理解中虚拟内存地址应该更大,从而提供更大的虚拟地址空间?我再次成为新手,当然不完全理解VM和MMU:)

除非您使用新的64位armv8架构,否则您应该只看到32位地址:-)所以答案是它取决于您使用的架构以及您是否使用3G / 1G与2G / 2G内核分裂。 [大多数linux机器都配置为内核占用4G地址空间的上1G(0xc0000000 - 0xffffffff),进程使用较低的3G(0x00000000 - 0xbfffffff)。但是,某些机器配置了2G / 2G分割,内核占用上部2G(0x80000000 - 0xffffffff)并使用较低的2G(0x00000000 - 0x7fffffff)进行处理。我认为内核配置VMSPLIT_3G / VMSPLIT_2G设置了这个。