你知道Embeded linux的内核流程是怎样的?

你知道Embeded linux的内核流程是怎样的?,第1张

前提知识点:

内核最初启动的时候,没有启动MMU,这样导致CPU只认物理地址(又称运行地址),不认虚拟地址(又称链接地址)。

所以,地址 *** 作在内核汇编中普遍存在,基于内核编译时,是用链接脚本进行定位的。基于无MMU的CPU运行时,是依据PC地址进行定位的。所以,运行内核时,需要将虚拟地址转为物理地址以供运行。

最常见的方法即是,adr获取物理地址,ldr获取虚拟地址,两者相减得偏移值,后续虚拟地址加偏移得物理地址。

分析依据:

1.硬件imx6

2.内核3.0.35

大纲:

1.汇编部分:

1.1SVC模式、禁止中断

1.2.获取CPU架构ID,匹配CPU架构信息(协处理器读取)

1.3.内核启动参数确认

1.4.创建页表(16K一级初始页表区、内核镜像、atag)

1.5.ICACHE/DCACHE

1.6.MMU启动(协处理器设置)

1.7.映射(数据、bss、内核接口需求)

2.C语言部分

2.1初始化系统(时钟等)

2.2匹配CPU芯片并初始化

....

uboot引导过后,经过判断MMU = off, D-cache = off, I-cache = dont care, r0 = 0,* r1 = machine nr, r2 = atags or dtb pointer,全部符合才跳转到以下入口

arch/arm/kernel/head.S

你知道Embeded linux的内核流程是怎样的?,第2张

你知道Embeded linux的内核流程是怎样的?,第3张

你知道Embeded linux的内核流程是怎样的?,第4张

你知道Embeded linux的内核流程是怎样的?,第5张

你知道Embeded linux的内核流程是怎样的?,第6张

一、CPU确认:

/arch/arm/kernel/head-common.S

你知道Embeded linux的内核流程是怎样的?,第7张

你知道Embeded linux的内核流程是怎样的?,第8张

你知道Embeded linux的内核流程是怎样的?,第9张

你知道Embeded linux的内核流程是怎样的?,第10张

IMX6为ARMv7架构,所以定义文件在/arch/arm/mm/proc-v7.S

你知道Embeded linux的内核流程是怎样的?,第11张

地址转换过程:

因为在判定CPU架构时未开启系统的MMU功能,所以均使用物理地址,

而内核代码在连接时是以虚拟地址来实现的,因此要想用proc_info_list 结构,该结构表示的是内核所支持的CPU架构

__lookup_processor_type使用该元素的前两个字段cpuid和mask来匹配当前CPUID,如果满足CPUID & mask == cpuid,则找到当前cpu的定义并返回

二、内核启动参数确认

你知道Embeded linux的内核流程是怎样的?,第12张

你知道Embeded linux的内核流程是怎样的?,第13张

三、SMP调整

你知道Embeded linux的内核流程是怎样的?,第14张

你知道Embeded linux的内核流程是怎样的?,第15张

四、页表(16K一级初始页表、内核Image、atags、串口地址重定位)

你知道Embeded linux的内核流程是怎样的?,第16张

你知道Embeded linux的内核流程是怎样的?,第17张

你知道Embeded linux的内核流程是怎样的?,第18张

你知道Embeded linux的内核流程是怎样的?,第19张

你知道Embeded linux的内核流程是怎样的?,第20张

你知道Embeded linux的内核流程是怎样的?,第21张

你知道Embeded linux的内核流程是怎样的?,第22张

五、MMU使能

你知道Embeded linux的内核流程是怎样的?,第23张

你知道Embeded linux的内核流程是怎样的?,第24张

协处理器介绍:

你知道Embeded linux的内核流程是怎样的?,第25张

你知道Embeded linux的内核流程是怎样的?,第26张

你知道Embeded linux的内核流程是怎样的?,第27张

六、映射(数据、bss、入口需求)

你知道Embeded linux的内核流程是怎样的?,第28张

你知道Embeded linux的内核流程是怎样的?,第29张

你知道Embeded linux的内核流程是怎样的?,第30张

你知道Embeded linux的内核流程是怎样的?,第31张

你知道Embeded linux的内核流程是怎样的?,第32张

你知道Embeded linux的内核流程是怎样的?,第33张

你知道Embeded linux的内核流程是怎样的?,第34张

你知道Embeded linux的内核流程是怎样的?,第35张

arch/arm/kernel/setup_arch.c

你知道Embeded linux的内核流程是怎样的?,第36张

内核2.6.39.rc1之前的__lookup_machine_type被改为setup_machine_tags       

你知道Embeded linux的内核流程是怎样的?,第37张

你知道Embeded linux的内核流程是怎样的?,第38张

你知道Embeded linux的内核流程是怎样的?,第39张

/arch/arm/include/asm/mach/arch.h 

你知道Embeded linux的内核流程是怎样的?,第40张

/arch/arm/kernel/vmlinux.lds

你知道Embeded linux的内核流程是怎样的?,第41张

/arch/arm/include/asm/mach/arch.h

你知道Embeded linux的内核流程是怎样的?,第42张

/arch/arm/mach-mx6/board-mx6q_sabresd.c

你知道Embeded linux的内核流程是怎样的?,第43张

include/generated/mach-types.h +1109

你知道Embeded linux的内核流程是怎样的?,第44张

你知道Embeded linux的内核流程是怎样的?,第45张

你知道Embeded linux的内核流程是怎样的?,第46张

你知道Embeded linux的内核流程是怎样的?,第47张

你知道Embeded linux的内核流程是怎样的?,第48张

你知道Embeded linux的内核流程是怎样的?,第49张

你知道Embeded linux的内核流程是怎样的?,第50张



 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2612971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-10
下一篇 2022-08-10

发表评论

登录后才能评论

评论列表(0条)

保存