setup_arch函数主要是处理cpu体系相关架构,我们是arm64平台,这个函数处理arm64的一些初始化,主要包括: 初始化内核的mm结构体的代码段、数据段和栈的结束地址; 调用函数early_fixmap_init进行早期固定映射初始化; 调用函数early_ioremap_init进行早期io映射初始化; 调用函数setup_machine_fdt解析fdt中内存,加入到memblock...
接下来就是解析bootloader传递的命令行参数,通过tag->hdr.tag查找内核中预置的对应类型tag的解析函数,然后调用对应类型tag的parse函数即可实现对参数的解析。 /* arch/arm/kernel/setup.c */staticint__initparse_tag(conststructtag *tag){externstructtagtable__tagtable_begin, __tagtable_end;structtagtable*t;...
Linux内核源码分析之setup_arch (三) 基本上把setup_arch主要的函数都分析了,由于距离上一篇时间比较久了,所以这里重新贴一下大致的流程图,本文主要分析的是bootmem_init函数。 代码分析 bootmem_init函数的结构如下: find_limits通过存储在meminfo中的内存条信息得到低端内存和高端内存的页框编号,分别放入到min、max...
1. 概述 接着上一篇《Linux内核源码分析之setup_arch (一)》继续分析,本文首先分析arm_memblock_init函数,然后分析内核启动阶段的是如何进行内存管理的。 2. arm_memblock_init 该函数的功能比较简单,主要就是把meminfo中记录的内存条信息添加到memblock.memory中,然后把内核镜像所在内存区域添加到memblock.reserved中,...
Linux内核源码分析之setup_arch (三)基本上把setup_arch主要的函数都分析了,由于距离上一篇时间比较久了,所以这里重新贴一下大致的流程图,本文主要分析的是bootmem_init函数。 代码分析 bootmem_init函数的结构如下: find_limits通过存储在meminfo中的内存条信息得到低端内存和高端内存的页框编号,分别放入到min、max_...
在Linux内核源码分析之setup_arch (二) 中介绍了当前启动阶段的内存分配函数memblock_alloc,该内存分配函数在本篇将要介绍paging_init中用于页表和内存的分配,paging_init函数大致流程如下图所示。 2. paging_init 2.1 build_mem_type_table 该函数根据具体的CPU架构对静态定义的mem_types数组中定义的属性进行调整。
Linux内核源码分析之setup_arch (二) 1. 概述 接着上一篇《Linux内核源码分析之setup_arch (一)》继续分析,本文首先分析arm_memblock_init函数,然后分析内核启动阶段的是如何进行内存管理的。 2. arm_memblock_init 该函数的功能比较简单,主要就是把meminfo中记录的内存条信息添加到memblock.memory中,然后把内核镜像...
接着上一篇《Linux内核源码分析之setup_arch (一)》继续分析,本文首先分析arm_memblock_init函数,然后分析内核启动阶段的是如何进行内存管理的。 2. arm_memblock_init 该函数的功能比较简单,主要就是把meminfo中记录的内存条信息添加到memblock.memory中,然后把内核镜像所在内存区域添加到memblock.reserved中,arm_mm_me...
二、解析详细流程 三、设备树的执行入口setup_arch linux最底层的初始化部分在head.S中,这是汇编代码,我们暂且不作过多讨论。在head.S完成部分初始化之后,就开始调用C语言函数,而被调用的第一个C语言函数就是init/main.c start_kernel: asmlinkage __visiblevoid__initstart_kernel(void){//...setup_arch(&com...
__atags_pointer,定义在汇编文件arch/arm/kernel/head-common.S的__switch_data子程序(可参考“ARM架构内核启动分析-head.S(1.4、stext分析之打开MMU并跳到start kernel”一文)),在内核代码源头stext运行前,由arm寄存器R2保存要传递给内核的参数的地址,当stext运行到子程序__switch_data时,定义变量__atags_point...