如何在uboot中找到由lowlevel_init()调用的s_init()的实现

Posted

技术标签:

【中文标题】如何在uboot中找到由lowlevel_init()调用的s_init()的实现【英文标题】:how to find the implementation of s_init() which called by lowlevel_init() in uboot 【发布时间】:2019-08-14 13:41:51 【问题描述】:

在u-boot-2017.05-rc3\arch\arm\cpu\armv8\lowlevel_init.S中

lowlevel_init() 调用函数 s_init()

但我在项目中找不到 s_init() 函数的实现

我有“grep -nirs s_init”。在所有项目中,但没有关于 armv8 的 s_init 实现。

这里有一些代码: /* * 调用很早的 init 函数。这应该只做*绝对最低限度的开始。它不应该: * * - 设置 DRAM * - 使用 global_data * - 清除 BSS * - 尝试启动控制台 * * 对于带有 SPL 的板,这应该是空的,因为 SPL 可以执行所有 * 在 SPL board_init_f() 中的这个初始化在此之后立即调用 * 的函数。 */ bl s_init

【问题讨论】:

【参考方案1】:

对于 ARMv7,s_init() 的弱实现存在于 arch/arm/cpu/armv7/lowlevel_init.S 中

.pushsection .text.s_init, "ax"
WEAK(s_init)
        bx      lr
ENDPROC(s_init)
.popsection

几个板子重新实现了这个功能。

arch/arm/cpu/armv8/Makefile 有这一行:

obj-$(CONFIG_ARCH_SUNXI) += lowlevel_init.o

所以这个模块是只为 SUNXI 板子构建的。 s_init()在arch/arm/mach-sunxi/board.c中实现。

【讨论】:

以上是关于如何在uboot中找到由lowlevel_init()调用的s_init()的实现的主要内容,如果未能解决你的问题,请参考以下文章

uboot研读笔记 | 14 - uboot启动流程分析(2016.03版本)

uboot分析:uboot的启动过程分析

反汇编arm-linux-objdump 就能

一,移植uboot,分析uboot启动流程

uboot启动源码分析

uboot中串口(控制台)初始化详解