如何在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()的实现的主要内容,如果未能解决你的问题,请参考以下文章