如何在u-boot

时间:2015-12-18 13:28:43

标签: linux embedded-linux u-boot yocto intel-edison

我正在为英特尔爱迪生构建Yocto图像。

其中一个图像组件是u-boot,带有Edison特定的补丁。默认情况下,Edison的UART端口用于u-boot控制台。我想禁用此功能,但仅限于串行接口(u-boot也会侦听USB并且需要保留)。

我主要担心的是" 按任意键停止自动提取" UART端口上的功能。我需要此端口来连接可能在主设备启动过程中发送内容的附件。

如何解决此问题?是否有环境变量,或者我是否需要修改源?

提前致谢!

3 个答案:

答案 0 :(得分:6)

我差不多一年后才回到这个问题,现在我已经找到了合适的解决方案。

我正在处理的董事会在 BSP 中有一个相当新的 u-boot 。要禁用串行控制台,我必须执行以下操作:

  • 将以下定义添加到主板的配置标题(位于 include / configs / board.h 中):

    #define CONFIG_DISABLE_CONSOLE
    #define CONFIG_SILENT_CONSOLE
    #define CONFIG_SYS_DEVICE_NULLDEV
    
  • 检查您的主板是否在同一个文件中启用了 early_init_f

    #define CONFIG_BOARD_EARLY_INIT_F 1
    
  • 找到拱门文件(类似 arch / x86 / cpu / architecture / architecture.c )并将此调用添加到其 early_init_f 功能中。它实际上修改了board的全局数据变量以具有这些标志:

    gd->flags |= (GD_FLG_SILENT | GD_FLG_DISABLE_CONSOLE);
    
  • 我的主板没有,所以我不得不添加整个功能

     int board_early_init_f(void)
     {
          gd->flags |= (GD_FLG_SILENT | GD_FLG_DISABLE_CONSOLE);
          return 0;
     }
    

就是这样。希望这有助于其他人!

答案 1 :(得分:1)

将u-boot环境变量bootdelay设置为-2将禁用UART中断U-Boot 2017.01发行版中的启动过程的功能。看来-1是特例。

defined for the kernel at the compile-time了解详情。

答案 2 :(得分:0)

Here is the video,其中逐步说明了如何防止U-boot控制台中断Raspberry Pi上的UART的自动启动并发送调试消息-如果其他板使用U-boot,则其他板也应类似地工作。但是,您将需要在u-boot源文件夹中找到适合您主板的正确配置文件。我知道只有链接不回答,所以下面是解决方案的快速分解:

安装依赖项

sudo apt install git make gcc gcc-aarch64-linux-gnu

Git克隆正式的u-boot存储库。或者,您可以git clone my fork of repository,这里我已经进行了无提示自动启动的必要更改-但是,如果您需要最新版本,则需要克隆官方存储库并自己进行更改。

git clone --depth 1 git://git.denx.de/u-boot.git

cd u-boot

找到您的电路板配置文件-它们取决于型号,例如对于Raspberry Pi 3是rpi_3_defconfig,对于Raspberry Pi 4是rpi_4_defconfig,依此类推。在文件末尾添加以下行

CONFIG_BOOTDELAY=-2
CONFIG_SILENT_CONSOLE=y
CONFIG_SYS_DEVICE_NULLDEV=y
CONFIG_SILENT_CONSOLE_UPDATE_ON_SET=y
CONFIG_SILENT_U_BOOT_ONLY=y

第一行消除了启动延迟,因此自动启动不会被UART接口上发送的消息打断。接下来的四行启用静默启动,因此U-boot不会在UART本身上发送任何消息,因为这些消息可能反过来会使您的设备混乱。还剩下一件事,设置静默启动环境变量。更改板子的头文件(ro raspberry pi是include / configs / rpi.h):

#define CONFIG_EXTRA_ENV_SETTINGS \
    "dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \
    "silent=1\0" \
    ENV_DEVICE_SETTINGS \
    ENV_DFU_SETTINGS \
    ENV_MEM_LAYOUT_SETTINGS \
    BOOTENV

现在配置为

make rpi_3_defconfig

从存储库主文件夹开始并使用

make CROSS_COMPILE=aarch64-linux-gnu-

构建过程完成后,您将拥有一个u-boot.bin文件,您需要对其进行重命名并将其复制到Raspberry Pi SD卡中。现在,您的Raspberry Pi在启动过程中将不会受到UART上任何消息的干扰。引导后的UART功能将不受影响。

相关文档:https://gitlab.denx.de/u-boot/u-boot/blob/HEAD/doc/README.autoboot https://gitlab.denx.de/u-boot/u-boot/blob/HEAD/doc/README.silent https://wiki.ubuntu.com/ARM/RaspberryPi