一. 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汇编函数。















![[C++_containers]10分钟让你掌握vector](https://img-blog.csdnimg.cn/2061eb2ab5e14341aee0189b14c35bbd.png)



