1

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

1)我想知道内核糟糕消息中显示的地址是虚拟的还是物理的?(我认为这些应该是虚拟的,只要 CPU 使用虚拟地址空间运行并且 MMU 重新映射?)

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

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

这些地址不应该是 0xffffffffa0110000、0xffffffffa011b948 之类的吗?我的意思是在我的理解中虚拟内存地址应该更大,从而提供更大的虚拟地址空间?同样,我是新手,当然不完全了解 VM 和 MMU :)

感谢您的评论,谢谢。

标记

4

1 回答 1

2

1)我想知道内核糟糕消息中显示的地址是虚拟的还是物理的?(我认为这些应该是虚拟的,只要 CPU 使用虚拟地址空间运行并且 MMU 重新映射?)

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

2) 这些地址不应该是 0xffffffffa0110000、0xffffffffa011b948 之类的吗?我的意思是在我的理解中虚拟内存地址应该更大,从而提供更大的虚拟地址空间?同样,我是新手,当然不完全了解 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 设置了这个]。

于 2012-10-19T18:25:02.847 回答