第01节_从源头分析_内核head.S对dtb的简单处理

uboot把设备树文件传给内核,内核怎么处理这些设备树文件呢?需要从内核的第一个执行文件head.s开始分析。

bootloader启动内核时,会设置r0,r1,r2三个寄存器,
r0一般设置为0;
r1一般设置为machine id (在使用设备树时该参数没有被使用);

r2一般设置ATAGS或DTB的开始地址

machine_id有什么作用呢?

一个内核比如说uImage可以支持多种单板:
smdk2410
smdk2440
jz2440
...

这些板子稍有差别,比如说smdk2410和smdk2440,虽然cpu大部分是兼容的,但是它们之间也有略微的差异。再比如说,smdk2440和jz2440可能使用的晶振都不一样。因此对每种单板来说,它里面应该有不同的初始化函数。

每种单板在内核中都有一个machine_desc结构体(机器描述结构体):
在该结构体中有初始化函数init,nr

怎么告诉内核现在是在哪种单板上运行呢?
此时就需要从uboot中传一些参数给内核,uboot是我们自己写的,它有办法知道内核在什么板子上运行。

把machine_id传给内核,内核启动的时候根据machine_id来比较machine_desc结构体中的nr,如果相等,那么调用对应的init函数

以前没有用设备树时,需要bootloader给内核传入一个machine_id,现在使用设备树,这个machine_id就不需要设置了

以前uboot向内核传参时,需要在内存中构造一系列的atag,可以把ATAGs的首地址传给内核,内核会从ATAGS里面得到那些参数。

bootloader给内核传递的参数时有2种方法:
ATAGS 或 DTB

内核中head.s所做的工作:

a. __lookup_processor_type : 使用汇编指令读取CPU ID, 根据该ID找到对应的proc_info_list结构体(里面含有这类CPU的初始化函数、信息)
b. __vet_atags : 判断是否存在可用的ATAGS或DTB
c. __create_page_tables : 创建页表, 即创建虚拟地址和物理地址的映射关系
d. __enable_mmu : 使能MMU, 以后就要使用虚拟地址了
e. __mmap_switched : 上述函数里将会调用__mmap_switched
f. 把bootloader传入的r2参数, 保存到变量__atags_pointer中
g. 调用C函数start_kernel

head.S/head-common.S :
把bootloader传来的r1值, 赋给了C变量: __machine_arch_type
把bootloader传来的r2值, 赋给了C变量: __atags_pointer // dtb首地址

原文地址:https://www.cnblogs.com/-glb/p/12347102.html

时间: 2024-10-23 17:06:39

第01节_从源头分析_内核head.S对dtb的简单处理的相关文章

第6课第2节_Binder系统_驱动情景分析_打印数据交互过程

添加宏: 功能:把NAME(n) 中的n作为字符串返回,eg:BR_NOOP作为字符串返回 BR开头:Binder--->IPC BC开头:IPC------>Binder #define NAME(n) case n: return #n const char *binder_cmd_name(uint32_t cmd) { switch(cmd) { NAME(BR_NOOP); NAME(BR_TRANSACTION_COMPLETE); NAME(BR_INCREFS); NAME(B

8.4 Android灯光系统_源码分析_电池灯

电池灯的Java代码在batteryservice.java中 电池的状态电量等信息由驱动获得,但驱动不会主动做这些事情,因此肯定有个App调用驱动程序读取电池信息,称这个App为A应用. 还有个App应用B,根据电量低的情况提示对话框:提示充电.对话框:将在30S内自动关机,应用A会发出一些通知 说明: (1)APP0:读取驱动,当驱动检测到电池事件发生,唤醒APP0 (2)APP1,2,3......  注册通知响应函数 (3)APP0发出通知 (4)APP1,2,3.....执行对应的函数

ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 GIS的六大功能是数据获取.存储.查询.分析.表达.输出.在前面的内容里已经介绍了使用ArcGIS进行数据获取.存储.查询.表达和输出的过程,本章将介绍如何在ArcGIS中进行地理分析.分析是GIS的核心和灵魂,是GIS区别于一般的信息系统.CAD或者电子地图系统的主要标志之一. GIS分析,就是研究

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

内存分析_.Net垃圾回收介绍

垃圾回收 1.       .Net垃圾回收中涉及的名称 1.1.什么是代? 垃圾回收器为了提升性能使用了代的机制,共分为三代(Gen0.Gen1.Gen2).GC工作机制基于以下假设, 1)  对象越新,生存期越短 2)  对象越老,生存期越长 3)  回收堆的一部分比回收整个堆时间短 在应用程序的生命周期中,最近新建的对象被分配在第0代,在一次垃圾回收之后存活下来的进入下一代.这样可以使GC专注于回收最有可能存在更多可回收对象的第0代(最近分配的最有可能很快被释放) 1.2 什么时候发生垃圾

内存分析_.Net内存原理介绍

内存原理介绍 1.       .Net应用程序中的内存 1.1.Net内存类型 Windows使用一个系统:虚拟寻址系统.这个系统的作用是将程序可用的内存地址映射到硬件内存中的实际地址上.其实际结果是在32位的Windows操作系统中,每个进程都可以使用4GB的内存,当然,64位机这个数字就更大了,在这4GB的内存中存储着可执行代码.代码加载的DLL和程序运行的所有变量,这4GB的内存成为虚拟地址空间或虚拟内存.在.Net中要使用多种类型的内存,包括:堆栈.非托管堆和托管堆. C#将数据分为2

开发生活_google上不了怎么办(谷歌)_附带html5分析

最近一直上不了谷歌,怎么办 自己折腾过的方法 1. 修改过 hosts 文件,  写死ip   . 这个方法无效了, 直接摔死....... 2.vpn   呵呵同上, 而且影响上网速度,无语了吧..... 3. 现在在使用的方法, 直接使用红杏, 已经在用了, 正所谓无图无真相 facebook ,  google 能使用就已经满足了, 高级功能是要付费的, youtobe 只好忍痛了. 下载地址附带教程(记住是有教程的) 点我下载 我选择了离线安装, 在线安装很慢, 真心无法接受. 把下载的

Linux MTD子系统 _从模型分析到Flash驱动模板

MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化硬件驱动框架.本文基于3.14内核,讨论MTD驱动框架. MTD子系统框架 设备节点层:MTD框架可以在/dev下创建字符设备节点(主设备号90)以及块设备节点(主设备号31), 用户通过访问此设备节点即可访问MTD字符设备或块设备. MTD设备层: 基于MTD原始设备, Linux在这一层次定义出

德比足球_德比分析_大连一方集团退出球队

近日,有多家媒体人爆料,北方某支中超球队将有地震级的变动,其中传得最多的就是万达集团将从大连一方俱乐部撤资,让许多的大连球迷担心不已,是不是大连足球又要毁了. 然而,在今日1月1日的中午,万达集团发布了官方声明,集团不再以目前的形式支持一方俱乐部,将寻求建立新的俱乐部.其官方公告大意如下:前段时间,一直有一些网络媒体在说万达集团要从大连一方撤资,从此以后不再管大连足球了.这件事闹得沸沸扬扬,有些不良自媒体故意操起键盘造谣生事,说万达集团根本不是真心搞足球,对于大连足球也是根本就不上心.对于这种情