uboot启动流程-涉及s_init汇编函数

一.   uboot启动涉及函数

本文简单分析uboot启动流程中,涉及的汇编函数:

lowlevel_init函数调用的函数:s_init 函数

save_boot_params_ret函数调用的函数: _main 函数

本文继上一篇文章的学习,地址如下:

uboot启动流程-涉及lowlevel_init汇编函数_凌肖战的博客-CSDN博客

二.  uboot 启动流程涉及的汇编函数

1.  s_init 函数

在之前的文章学习中,已经知道 lowlevel_init 函数后面会调用 s_init 函数, s_init 函数定义在文件
arch/arm/cpu/armv7/mx6/soc.c 中,如下所示:
808 void s_init(void)
809 {
810 struct anatop_regs *anatop = (struct anatop_regs 
*)ANATOP_BASE_ADDR;
811 struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
812 u32 mask480;
813 u32 mask528;
814 u32 reg, periph1, periph2;
815
816 if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL) ||
817 is_cpu_type(MXC_CPU_MX6ULL) || is_cpu_type(MXC_CPU_MX6SLL))
818 return;
.......
850 writel(mask528, &anatop->pfd_528_clr);
851 }

在第 816 行会判断当前 CPU 类型,如果 CPU MX6SX MX6UL MX6ULL MX6SLL中的任意一种,那么就会直接返回,相当于 s_init 函 数 什 么 都 没 做 。 所 以 对 于 I.MX6UL/I.MX6ULL 来说,s_init 就是个空函数。

s_init 函数退出以后进入函数 lowlevel_init 但是, lowlevel_init 函数也执行完成了,返回到了函数 cpu_init_crit ,函数 cpu_init_crit 也执行完 成了,最终返回到 save_boot_params_ret函数, save_boot_params_ret函数的调用关系如下:

这里的 s_init函数,对 于 I.MX6UL/I.MX6ULL来说,s_init 就是个空函数,就是说什么也没有直接返回了。

调用关系可以看出:

接下来要执行的是 save_boot_params_ret 中的_main 函数。

下一篇文章分析 :_main汇编函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/124299.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现torch.arange的tensor版本

文章目录 背景实现方案不可行的情况 背景 import torch我们都知道,torch.arange只支持数字,不支持tensor,如下: torch.arange(0,5,1)tensor([0, 1, 2, 3, 4]) 但是如果使用tensor,就会报错: torch.arang…

正点原子嵌入式linux驱动开发——U-boot顶层Makefile详解

在学习uboot源码之前,要先看一下顶层Makefile,分析gcc版本代码的时候一定是先从顶层Makefile开始的,然后再是子Makefile,这样通过层层分析Makefile即可了解整个工程的组织结构。顶层Makefile也就是uboot根目录下的Makefile文件&am…

word已排序好的参考文献,插入新的参考文献,序号更新

原排序好的文献序号。 现在在3号后面插入一个新文献。4,5号应该成为5,6 这时在3号后面,回车,就会自动的增长。如下图: 但是如果手滑,把[4]删除了如何排序?? 如下图: …

数据分析与挖掘: 红楼梦人物关系(Python)词云图

一: 角色剧本 第一代:水字辈祖宗创下基业 贾源、贾演兄弟二人帮先帝打江山立下战功,贾演被封为宁国公(大约有平定江山安宁天下之意),贾源被封荣国公(大约有强国富民之功)。贾源贾演二兄弟皆是一…

23.2 Bootstrap 卡片

1.卡片 1.1卡片样式 在Bootstrap 5中, .card, card-header, .card-body, .card-footer类是用于创建卡片样式.下面是这些类的简单介绍: * 1. .card: 用于创建一个基本的卡片容器它作为一个包裹元素,通常与其他卡片类一起使用.* 2. .card-header: 用于创建卡片的头部部分.通常在…

Scala第十六章节

Scala第十六章节 scala总目录 文档资料下载 章节目标 掌握泛型方法, 类, 特质的用法了解泛型上下界相关内容了解协变, 逆变, 非变的用法掌握列表去重排序案例 1. 泛型 泛型的意思是泛指某种具体的数据类型, 在Scala中, 泛型用[数据类型]表示. 在实际开发中, 泛型一般是结合…

编程新手?跟着这个教程,用Python画出小猪佩奇

小猪佩奇是许多小朋友们的心头好,它的形象可爱、颜色鲜艳。你知道吗,只需要Python中的一个简单模块,我们就可以自己绘制出这个可爱的形象!本文将教你如何使用Python的turtle模块,一步步画出小猪佩奇。 1. 准备工作&a…

mybatis项目启动报错:reader entry: ���� = v

问题再现 解决方案一 由于指定的VFS没有找,mybatis启用了默认的DefaultVFS,然后由于DefaultVFS的内部逻辑,从而导致了reader entry乱码。 去掉mybatis配置文件中关于别名的配置,然后在mapper.xml文件中使用完整的类名。 待删除的…

创建线程池

如何创建线程池及处理相应任务 目录 如何创建线程池及处理相应任务线程池定义解决的问题(需求)工作原理实现线程池创建示意图重要构造器创建线程池(ExecutorService)线程池任务处理常用API处理Runnable任务处理Callable任务 使用工具类(Executors)创建线程池常用API应用案例 拓…

SG Former论文学习笔记

超越SWin和CSWin Transformer的新模型 代码地址:https://github.com/OliverRensu/SG-Former 论文地址:https://arxiv.org/pdf/2308.12216.pdf ViT在各种视觉任务中虽然成功,但它的计算成本随着Token序列长度的增加呈二次增长,这在…

OpenGLES:绘制一个混色旋转的3D球体

一.概述 前面几篇博文讲解了如何使用OpenGLES实现不同的3D图形 本篇博文讲解怎样实现3D世界的代表图形:一个混色旋转的3D球体 二.球体解析 2.1 极限正多面体 如果有学习过我前几篇3D图形绘制的博文,就知道要想绘制一个3D图形,首先要做的…

MYSQL的CRUD语句(含c++代码)

一.MySQl表的创建与删除 创建语句与删除语句 注意: 主键的数据类型,不可以是变长度类型需要()限制长度,表名字需要使用符号来包围。 二.MySQl数据插入 三.MySQl数据删除 四.MySQl数据更新 使用语句 SET SQL_SAFE_UPDATES 0; show variabl…