新手问题。
我正在查看一个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
答案 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)行。