5

新手问题在这里。

我在看一个u-boot板文件,里面有很多功能。
例如; board_mmc_init(), enet_board_init(), setup_splash_img(),等等

大多数这些函数都不会从板文件中调用。他们从其他地方接到电话。但我不知道在哪里。

在 Linux 内核板文件中有一个机器结构。在那里,我们可能会调用其他函数,.init_machine = myboard_init.myboard_init(void)这些函数又会调用其他函数。我发现这种风格很容易阅读。

我的问题是;确实u-boot有相当于.init_machine? 我在哪里查看一切“开始”的地方?谁把所有这些松散的功能都放在一个 u-boot 中boardfile?

-安迪

4

3 回答 3

16

首先,uboot 会从指定 CPU 的 start.S 开始,像这样: http ://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f =arch/arm/cpu/armv7/start.S;h=ef62fc83270a327bc7df970f598540f1d7ce0fe2;hb=HEAD

它会做一些事情,比如“异常向量”设置、缓存设置等。

然后它会跳转到 http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=arch/arm/lib/crt0.S 做一些 c 运行时设置,

然后它会回到start.S,在一些杂项之后,你可以参考评论,它会跳转到lowlevel_init.S http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot .git;a=blob;f=arch/arm/cpu/armv7/lowlevel_init.S;h=82b2b86520eb2b2d63c2478145b625a49f931542;hb=HEAD

然后..它将进入soc(在ARM中很常见)初始化,如下所示: http ://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f =arch/arm/cpu/armv7/mx6/soc.c

在 soc init 完成后,它会去一些板相关的 init,在板 init 中,它会调用一些外围设备/驱动程序 init。

希望这会让您对 uboot 过程有所了解。

于 2013-08-27T16:10:50.403 回答
2

我有一个带有 bcm283x Broadcom 架构和 arm1176 arm 核心的树莓派板。所以start.S位于arch/arm/cpu/arm1176/start.S。这将初始化关键寄存器并禁用 mmu。接下来它将执行lowlevel_init,然后分支到_main,如果树莓派在arch/arm/lib/crt0.S中定义,这将初始化堆栈指针和全局数据并调用board_init_f来初始化系统RAM(DRAM)以执行u -引导代码。它应该使用 global_data 指针来执行。

于 2016-05-08T17:49:30.607 回答
0

在 u-boot-2013.04 上,board_mmc_init 从驱动程序/mmc/mmc.c 函数 mmc_initialize(...) 中调用。

要找到这个,“grep -r”(递归)是你的朋友。

“我在哪里可以看到一切‘开始’的地方?”

不确定,但查找 ENTRY(_start) 行。

于 2013-08-27T10:53:48.383 回答