内核的第1个文件 head.s
1, 每1个单板 都对应 1个 machine_desc, 里面有对应的初始化函数
有nr =xxxx ,与uboot传过来的进行对比
使用设备树的话,这个参数 r 1 就不需要设置了
R2 :一般设置ATAGS或DTB的开始地址
2: 分析head.s
1,查找处理器类型 ,使用某汇编指令,读出CPU ID。看看你的内核是否支持这款CPU,不支持的话 就出错
如果支持的话,以后会调用这款CPU所对应的初始化函数
2.判断一下ATAGS和DTB是否有效 ,DTB里面有1个头部,头部里面有个MAGIC NUMBER,它去判断1下,R2所指的地方里面
,有没有这个MAGIC NUMBER。有的话 ,就说明你确实传入了一个有效的DTB文件
ATAGS 也是一样的。ATAGS也有头部信息
3:创建页表,内核是运行与虚拟地址
4:启动MMU 。启用虚拟地址后,它最终会跳到__mmap_switched
5: 把R2的地址写到一个C变量里面 _atags_pointer
head.s head-common.s 最终把bootloader传来的R2值付给了 C变量_atags_pointer //DTB首地址
head.s head-common.s 最终把bootloader传来的R1值付给了 C变量_machine_arch_type