2017-04-02 41 views
1

在目标板的启动过程中,我们看到uboot(bootloader)在控制台上打印一些信息,如图像名称,图像类型,加载地址,验证校验和等。它使用哪种打印机制?它是否使用类似printk的东西,或者甚至在内核启动之前它有自己的打印信息定义?我在哪里可以找到它的打印实施代码?uboot如何在主板上打印信息

+0

基本上,U-Boot通过UART将消息输出到串行控制台。它有内部API来这样做。当然,在写入UART之前,U-Boot需要首先初始化(配置)它。这与内核几乎相同。为了更好地理解内部,你可以看看我缩小(最小)的U-Boot版本,它只能写入UART:https://gitlab.com/joeskb7/dra7xx-hello/tree/master –

+0

@samprotsenko感谢你的uboot代码。但我的UART是ttyHS,波特率是757000.我可以在内核中使用你的uboot代码来在内核中进行早期打印功能吗? – karthikpj

+0

该代码仅供参考。不,您不能使用它,因为它严格依赖于架构(仅适用于一个平台,可能与您的平台不一样)。基本上,我只是想向您展示如何在U-Boot中实现打印。您可以为您的平台寻找串行控制台驱动程序(在U-Boot中),并调查它的工作原理。像'debug()'和'printf()'这样的函数在所有体系结构中都是常见的,但最终它们都依赖于串行控制台驱动程序,这是您的平台特有的。 –

回答

1

在正常的U-boot启动过程中,将有限的信息打印到控制台。它使用与C编程中使用的相同类型的函数来打印信息。

的u-boot使用printfputs打印控制台上的信息。你可以在u-boot源代码中找到相同的函数实现(u-boot boardfile和drivers)。

有很多命令可以从u-boot命令提示符中尝试获取更多信息。

为了让更多的信息,您可以:

  • 使用debug_cond (cond, fmt, args...):如果你定义一些COND,一旦满足,U-Boot的将打印出此消息。
  • 使用debug(fmt, args...):可以定义在文件中DEBUG的u-boot- include/configs/<boardfile>_common.h(就像我的情况mx6_common.h),一旦做到这一点,重新编译代码,U-Boot的将打印出所有调试信息

注意:如果您对代码进行了太多调试,可能会导致u-boot挂起。

0

如果您想要关于uBoot的信息(例如打印到的位置或其值的变量),可以使用'printenv'命令并更改,您可以在启动时(中断内核启动时)输入uBoot他们用'setenv'命令。