内核启动汇编阶段分析
汇编阶段的主线代码主要分布在head.S中
1.设置虚拟地址和物理地址(约29行)
#define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET)
#define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)
- Linux是一定开mmu的,故必须同时设置虚拟地址和物理地址
- 首先来看虚拟地址,其值为(PAGE_OFFSET + TEXT_OFFSET),首先追踪PAGE_OFFSET 这个宏,发现有挺多个文件定义的,看了一遍发现应该是arch/arm/include/asm/memory.h中,但是memory.h中也有两处定义,一处在约27行,一处在115行
可知,如果定义了 CONFIG_MMU则此处的PAGE_OFFSET将会被定义
如果前面27行的PAGE_OFFSET未被定义,则此处的PAGE_OFFSET将会被