Печать произвольных шестнадцатеричных символов в оболочке u-boot - PullRequest
0 голосов
/ 11 января 2020

Я бы хотел раскрасить мой загрузочный загрузочный загрузчик, чтобы он выводил захватывающее сообщение об ошибке. Обычно я просто использую escape-последовательности ANSI, такие как ниже.

#!/bin/bash
printf '\x1b[31mERROR\33[0m'
#!/usr/bin/env python
print("\x1b[31mERROR\33[0m")

Как можно получить эквивалентное поведение в u-boot? Похоже, U-Boot просто удалит Backsla sh, например, ниже

# u-boot shell
echo \33[31m  # prints "33[31m"
echo \x1b[31m # prints "x1b[31m"

1 Ответ

0 голосов
/ 12 января 2020

На консоли bash вы можете использовать CTRL-V для дословного ввода управляющего символа. Это еще не поддерживается U-Boot. Но я представил патч, чтобы включить это, ср. https://patchwork.ozlabs.org/project/uboot/list/?series=152686.

Команда эха U-Boot не знает escape-последовательности '\ x', но дословно копирует escape-символ в консоль.

Так вот что Вы можете сделать:

Создать скрипт test.txt с вашими эхо-командами, который содержит escape-последовательности.

echo -e 'echo \e[33mError\e[37m\necho \e[32mWarning\e[37m' > test.txt

Я покажу его ниже в шестнадцатеричном формате, чтобы стало понятно, что в file:

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

Когда U-Boot собирается с CONFIG_DISTRO_DEFAULTS = y, он будет искать скрипты boot.scr.uimg и boot.scr на вашем загрузочном устройстве. Так что это, вероятно, где вы хотите интегрировать escape-последовательности.

...