According to Documentation/x86/x86_64/mm.txt
, the layout of kernel space should be like this in 64bit linux:
6 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm
7 hole caused by [48:63] sign extension
8 ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole
9 ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory
10 ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole
11 ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space
12 ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole
13 ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB)
14 ... unused hole ...
15 ffffffff80000000 - ffffffffa0000000 (=512 MB) kernel text mapping, from phys 0
16 ffffffffa0000000 - fffffffffff00000 (=1536 MB) module mapping space
But how does the kernel space layout in 32bit linux looks like? What description I can find is all about ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM, but these doesn't tell me details like where is the physmap address, or where is kernel code and kernel modules etc. What exactly are they like?
Thanks for any help:)