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
Это совсем не то, что вы намеревались сделать !
Всегда помните, что имя и значение должны быть разделены пробелом и/или символами табуляции !