Linux kernel uboot如何在board启动期间打印信息

Linux kernel uboot如何在board启动期间打印信息,linux-kernel,kernel,linux-device-driver,bootloader,u-boot,Linux Kernel,Kernel,Linux Device Driver,Bootloader,U Boot,在目标板的引导过程中,我们看到uboot(引导加载程序)在控制台上打印一些信息,如映像名称、映像类型、加载地址、验证校验和等。它使用哪种打印机制?它是使用类似于printk的东西,还是在内核启动之前就有自己的打印信息定义?在哪里可以找到打印实现的代码?在正常的U-boot引导过程中,控制台会打印有限的信息。它使用与我们在C编程过程中使用的相同类型的函数来打印信息 u-boot使用打印F和puts在控制台上打印信息。您可以在u-boot源代码(u-boot板文件和驱动程序)中找到相同的函数实现 有

在目标板的引导过程中,我们看到uboot(引导加载程序)在控制台上打印一些信息,如映像名称、映像类型、加载地址、验证校验和等。它使用哪种打印机制?它是使用类似于
printk
的东西,还是在内核启动之前就有自己的打印信息定义?在哪里可以找到打印实现的代码?

在正常的U-boot引导过程中,控制台会打印有限的信息。它使用与我们在C编程过程中使用的相同类型的函数来打印信息

u-boot使用打印F和puts在控制台上打印信息。您可以在u-boot源代码(u-boot板文件和驱动程序)中找到相同的函数实现

有很多命令,您可以从命令提示中尝试获取更多信息

要启用更多消息,您可以:

  • 使用
    debug\U cond(cond,fmt,args…):
    如果定义了某个cond,一旦满足,U-boot将打印此消息
  • 使用
    debug(fmt,args…):
    您可以在文件u-boot-
    include/configs/\u common.h
    (就像我的例子mx6\u common.h)中定义debug,一旦这样做并重新编译代码,u-boot将打印出所有调试消息

注意:如果在代码中添加了太多调试,可能会导致u-boot挂起。

启动时可以输入uBoot(中断内核启动)如果您需要有关uBoot的信息,例如它打印到哪里或它的变量值是什么,您可以使用“printenv”命令并使用“setenv”命令更改它们

基本上,U-Boot通过UART将消息打印到串行控制台。它有内部API来实现这一点。当然,在写入UART之前,U-Boot需要首先初始化(配置)它。这与内核非常相似。为了更好地理解内部结构,您可以查看我的U-Boot压缩(最小)版本,它只能写入UART:@samprotsenko感谢您提供的uboot代码。但我的UART是ttyHS,波特率是757000。我可以在内核中使用您的uboot代码来实现内核中的早期打印功能吗?该代码仅供参考。不,您不能使用它,因为它严格依赖于体系结构(只适用于一个平台,这可能与您的平台不同)。基本上,我只是想向你展示如何在U型靴中,在引擎盖下进行打印。您可以为您的平台(U-Boot)查找串行控制台驱动程序,并研究其工作原理。像
debug()
printf()
这样的函数在所有体系结构中都很常见,但最终它们都依赖于特定于您平台的串行控制台驱动程序。您是否试图解决一些实际问题?