Команды U-Boot

  Инфо    Память    Хранилище    Выполнение    Загрузка      Окружение      FDT    Sunxi  

  editenv    env    printenv    run    saveenv      setenv      setexpr  

setenv *


Установить переменные окружения (set environment variables)

Help: => help setenv setenv - set environment variables Usage: setenv [-f] name value ... - [forcibly] set environment variable 'name' to 'value ...' setenv [-f] name - [forcibly] delete environment variable 'name' =>

setenv [-f] name value ... - [принудительно] установить переменную окружения name в 'value ...'

value - текстовая строка из значений, разделенных пробелом.

setenv [-f] name - [принудительно] удалить переменную окружения 'name'

Например,
setenv mac_addr be:2a:9a:27:6a:3c
setenv wifi_mac a8:60:37:a1:ce:00

setenv .flags name:&lgt;флаг(и)&rgt;

Флаги типа переменной:

  • s - строка
  • d - десятичное
  • x - 16-ричное
  • b - логическое
  • i - IP-адрес
  • m - MAC-адрес
Флаги доступа переменной:
  • a - any (любой)
  • r - read-only (только чтение)
  • o - write-once (однократная запись)
  • c - change-default (изменение по умолчанию)

Пример проверки коррктности MAC-адреса

 => printenv mac_addr
## Error: "mac_addr" not defined
=> set mac_addr be:2a:9a:27:6a:3c
Unknown command 'set' - try 'help'
=> setenv mac_addr be:2a:9a:27:6a:3c
=> printenv mac_addr
mac_addr=be:2a:9a:27:6a:3c
=> setenv .flags mac_addr:m
=> printenv mac_addr
mac_addr=be:2a:9a:27:6a:3c
=> setenv mac_addr be:2a:9a:27:6a:3w
## Error: flags type check failure for "mac_addr" <= "be:2a:9a:27:6a:3w" (type: m)
## Error inserting "mac_addr" variable, errno=1
=>

Пример защиты MAC-адреса от модификации

=> setenv .flags mac_addr:sr
=> printenv mac_addr
mac_addr=be:2a:9a:27:6a:3c
=> setenv mac_addr be:2a:9a:27:6a:33
## Error: Can't overwrite "mac_addr"
## Error inserting "mac_addr" variable, errno=1
=>

Результат выполнения команды для Orange Pi Zero2:

=> setenv mac_addr be:2a:9a:27:6a:3c => printenv mac_addr mac_addr=be:2a:9a:27:6a:3c

=> env default -a ## Resetting to default environment => printenv baudrate=115200 bootcmd=run distro_bootcmd bootdelay=2

Чтобы изменить среду U-Boot, вы должны использовать команду setenv .

При вызове с одним аргументом (только имя переменной) она удалит любую переменную с этим именем из среды U-Boot, если такая переменная существует. Любое хранилище, занятое такой переменной, будет автоматически освобождено:


=> setenv foo This is an example value. => printenv foo foo=This is an example value. => setenv foo => printenv foo ## Error: "foo" not defined =>

При вызове с несколькими аргументами в первым снова будет имя переменной, а все последующие аргументы (разделенные одиночными пробелами) образуют значение, которое сохраняется для этой переменной. Новые переменные будут созданы автоматически, существующие перезаписаны.


=> printenv bar ## Error: "bar" not defined => setenv bar This is a new example. => printenv bar bar=This is a new example. =>

Помните стандартные правила цитирования оболочки, когда значение переменной должно содержать символы, которые имеют особое значение для синтаксического анализатора командной строки.

Например, символ $ (доллар), который используется для подстановки переменных, или точка с запятой, разделяющая команды.

Используйте символ обратной косой черты (\ ) для экранирования таких специальных символов или заключите всю фразу в апострофы ( ' ).

Используйте "${name}" для раскрытия переменных


=> setenv cons_opts 'console=tty0 console=ttyS0,${baudrate}' => printenv cons_opts cons_opts=console=tty0 console=ttyS0,${baudrate} =>

  !   Внимание ! Распространенная ошибка - писать


setenv name=value (ошибка)
вместо


setenv name value (правильно)

При использовании знака = не будет никаких сообщений об ошибке. Это позволяет верить, что все прошло нормально, но вместо установки для переменной name значения value вы пытаетесь удалить переменную с именем name=value

Это совсем не то, что вы намеревались сделать !

Всегда помните, что имя и значение должны быть разделены пробелом и/или символами табуляции !