Ну, теперь я думаю, что могу дать себе ответ:)
Одним словом, в 32-битном linux некоторые области ядра сталкиваются, чтобы предотвратить трату ограниченного виртуального адресного пространства ядра (например, модули и vmalloc arena, образ ядра и physmap), поэтому расположение пространства ядра может быть не таким четким, как в 64-битном.
Расположение пространства ядра в 32-битном linux на x86 должно быть таким (некоторые отличия от AArch32: http://www.arm.linux.org.uk/developer/memory. txt):
fixmap : 0xffc57000 - 0xfffff000 (3744 kB)
pkmap : 0xff800000 - 0xffa00000 (2048 kB)
vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB)
lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB)
.init : 0xc0906000 - 0xc0973000 ( 436 kB)
.data : 0xc071ae6a - 0xc08feb78 (1935 kB)
.text : 0xc0400000 - 0xc071ae6a (3179 kB)
Согласно определению ZONE в 32-битном linux, ZONE_HIGHMEM включает область fixmap
,pkmap
, vmalloc
(модули ядра будут использовать область vmalloc
). Область lowmem
состоит из ZONE_DMA и ZONE_NORMAL. Она отображается линейно из физической памяти, и так называемая physmap ссылается именно на эту область. .init
, .data
, .text
внутри lowmem
принадлежат образу ядра, который в 64-битном linux является отдельной областью.