Linux内核ARM32内核内存布局图【转】
转自:https://www.coolcou.com/linux-kernel/linux-kernel-memory-management/the-linux-kernel-arm32-kernel-memory-layout.html
Linux内核ARM32内核内存布局图,Linux内核在启动时会打印出内核内存空间的布局图,下面是ARM Vexpress平台打印出来的内存空间布局图:
      Virtual kernel memory layout:
          vector  : 0xffff0000 - 0xffff1000  (    4 kB)
          fixmap  : 0xffc00000 - 0xfff00000  (3072 kB)
          vmalloc : 0xf0000000 - 0xff000000  ( 240 MB)
          lowmem  : 0xc0000000 - 0xef800000  ( 760 MB)
          pkmap   : 0xbfe00000 - 0xc0000000  (    2 MB)
          modules : 0xbf000000 - 0xbfe00000  (  14 MB)
            .text : 0xc0008000 - 0xc0658750    (6466 kB)
            .init : 0xc0659000 - 0xc0782000    (1188 kB)
            .data : 0xc0782000 - 0xc07b1920    ( 191 kB)
            .bss : 0xc07b1920 - 0xc07db378     ( 167 kB)
这部分信息的打印是在mem_init()函数中实现的。
      [start_kernel->mm_init->mem_init]
      pr_notice("Virtual kernel memory layout:\n"
                    "     vector  : 0x%08lx - 0x%08lx   (%4ld kB)\n"
                    "     fixmap  : 0x%08lx - 0x%08lx   (%4ld kB)\n"
                    "     vmalloc : 0x%08lx - 0x%08lx   (%4ld MB)\n"
                    "     lowmem  : 0x%08lx - 0x%08lx   (%4ld MB)\n"
      #ifdef CONFIG_HIGHMEM
                    "     pkmap   : 0x%08lx - 0x%08lx   (%4ld MB)\n"
      #endif
      #ifdef CONFIG_MODULES
                    "     modules : 0x%08lx - 0x%08lx   (%4ld MB)\n"
      #endif
                    "      .text : 0x%p" " - 0x%p" "   (%4td kB)\n"
                    "      .init : 0x%p" " - 0x%p" "   (%4td kB)\n"
                    "      .data : 0x%p" " - 0x%p" "   (%4td kB)\n"
                    "      .bss : 0x%p" " - 0x%p" "   (%4td kB)\n",
                    MLK(UL(CONFIG_VECTORS_BASE), UL(CONFIG_VECTORS_BASE) +
                        (PAGE_SIZE)),
                    MLK(FIXADDR_START, FIXADDR_END),
                    MLM(VMALLOC_START, VMALLOC_END),
                    MLM(PAGE_OFFSET, (unsigned long)high_memory),
      #ifdef CONFIG_HIGHMEM
                    MLM(PKMAP_BASE, (PKMAP_BASE) + (LAST_PKMAP) *
                        (PAGE_SIZE)),
      #endif
      #ifdef CONFIG_MODULES
                    MLM(MODULES_VADDR, MODULES_END),