U-Boot的。这一切从哪里开始?

时间:2013-08-27 10:05:35

标签: u-boot

新手问题。

我正在查看一个u-boot boardfile,它有很多功能。
例如; board_mmc_init(), enet_board_init(), setup_splash_img(),等。

大多数这些功能都不会从boardfile中调用。他们从其他地方打来电话。但我无法弄清楚在哪里。

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

我的问题是; u-boot是否等同于.init_machine?我在哪里可以查看所有内容的开始情况'?谁将所有那些松散的函数调用在u-boot boardfile?

-Andy

3 个答案:

答案 0 :(得分:12)

首先,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,在一些misc之后,你可以参考评论, 它会跳进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中非常常见)init,如下所示: 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, 在board init中,它将调用一些外围设备/驱动程序初始化。

希望能给你一些关于uboot过程的打击。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

在u-boot-2013.04上,从drivers / mmc / mmc.c调用board_mmc_init,函数mmc_initialize(...)。

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

“我在哪里可以看到一切都在哪里开始?”

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