u-boot - 在 u-boot shell 中打印任意十六进制字符
问题描述
我想为我的 u-boot bootcmd 着色,以便打印出令人惊叹的错误消息。通常我只会使用 ANSI 转义序列,如下所示。
#!/bin/bash
printf '\x1b[31mERROR\33[0m'
#!/usr/bin/env python
print("\x1b[31mERROR\33[0m")
如何在 u-boot 中获得等效行为?似乎 u-boot 只会删除反斜杠,如下所示
# u-boot shell
echo \33[31m # prints "33[31m"
echo \x1b[31m # prints "x1b[31m"
解决方案
在 bash 控制台上,您可以使用 CTRL-V 逐字输入控制字符。U-Boot 尚不支持此功能。但是我已经提交了一个补丁来启用它,cf。https://patchwork.ozlabs.org/project/uboot/list/?series=152686。
U-Boot 的 echo 命令不知道 '\x' 转义序列,而是将转义字符逐字复制到控制台。
所以这是你可以做的:
使用包含转义序列的 echo 命令创建脚本 test.txt。
echo -e 'echo \e[33mError\e[37m\necho \e[32mWarning\e[37m' > test.txt
我在下面以十六进制格式显示它,因此文件中的内容变得显而易见:
00000000 65 63 68 6F 20 1B 5B 33 33 6D 45 72 echo .[33mEr
0000000C 72 6F 72 1B 5B 33 37 6D 0A 65 63 68 ror.[37m.ech
00000018 6F 20 1B 5B 33 32 6D 57 61 72 6E 69 o .[32mWarni
00000024 6E 67 1B 5B 33 37 6D 0A ng.[37m.
将此转换为 U-Boot 映像
mkimage -T script -n 'test' -d test.txt test.scr
在 U-Boot 中加载脚本。我使用 tFTP 做到了这一点:
dhcp $script_addr_r test.scr
现在您可以执行脚本
source $script_addr_r
当使用 CONFIG_DISTRO_DEFAULTS=y 构建 U-Boot 时,它将在您的引导设备上查找脚本 boot.scr.uimg 和 boot.scr。所以这可能是您想要集成转义序列的地方。
推荐阅读
- c# - 有没有办法在 Visual Studio C# 中隐藏包的调试日志记录?
- rest - 使用微控制器/明文预编码的 POST 字符串制作 HTTP POST (REST API)
- r - 在 R 中使用 Keras 功能 API 将文本与分类特征相结合
- java - 尝试使用某些图像设置图像资源时应用程序崩溃
- python - 在数据框表中打印单列
- laravel - 如何从与模型相关的列中获取数据?
- android - 操作栏中的导航抽屉图标不起作用
- ruby-on-rails-5 - 如何使用 Turbo Streams 提交有关输入更改的表单?
- c# - 模拟测试 IDistributedCache
- google-analytics - 鱿鱼不显示位置谷歌分析