printenv [-a] - вывести [-a] значения всех переменных окружения
printenv name ... - вывести значение переменной окружения name
Вывод printenv аналогичен команде env print -a
Команда printenv выводит одну, несколько или все переменные среды U-Boot.
Когда указаны аргументы, они интерпретируются как имена переменных среды, которые будут выведены с их значениями.
Без аргументов printenv выводит весь список со всеми переменными в среде и их значениями, а также некоторую статистику о текущем использовании
и общем размере памяти, доступной для среды.
Для хранения переменных окружения используется раздел env, имеющий в таблице GPT параметры:
1) Partition Type GUID (GUID типа раздела) = EBD0A0A2-B9E5-4433-C087-68B6B72699C7
2) Unique Partition GUID (GUID раздела) = A0085546-4166-744A-53A3-FCA9272B8E46
3) Starting LBA (N блока первого сектора раздела) = 139264
4) Ending LBA (N блока последнего сектора раздела) = 172031
5) Attributes (атрибуты раздела) = 0000000000020008 [0]
6) Partition Name (имя раздела) = env
Размер раздела - блоков: 32768, Mбайт: 16
Переменные окружения хранятся в виде простых текстовых строк, разделенных нулевым байтом.
Признак конца - два нулевых байта.
В прошивочном образе Android содержимое этого раздела представлено в файле env.fex
размером 131072 байта. В начале файла - 4 байта CRC: например, 846cd2d6 , дальше - строки переменных.
Переменные окружения можно прочитать из памяти устройства консольной командой dd.
При этом на USB-флешку (681F-F2F4) будет записан файл env_zero.img размером 16 Мбайт, в начале
которого лежат строки переменных (дальше - пусто, в конце - мусор).
console:/ #
dd if=/dev/block/mmcblk0 of=/mnt/media_rw/681F-F2F4/env_zero.img bs=512 count=32768 skip=139264
32768+0 records in
32768+0 records out
16777216 bytes (16 M) copied, 0.335701 s, 48 M/s
console:/ #
В отличие от содержимого файла переменных окружения команда printenv дополнительно показывает
следующие переменные :
bootcmd=run setargs_mmc boot_normal (вместо bootcmd=run setargs_nand boot_normal)
bootreason=unknow
fdtcontroladdr=7be855e0
fileaddr=7c2b1780
filesize=2e71c
partitions=bootloader@mmcblk0p1: env@mmcblk0p2: boot@mmcblk0p3: super@mmcblk0p4: misc@mmcblk0p5: recovery@mmcblk0p6: cache@mmcblk0p7: vbmeta@mmcblk0p8: vbmeta_system@mmcblk0p9: vbmeta_vendor@mmcblk0p10: metadata@mmcblk0p11: private@mmcblk0p12: frp@mmcblk0p13: empty@mmcblk0p14: media_data@mmcblk0p15: Reserve0@mmcblk0p16: UDISK@mmcblk0p17
snum=9c00141511d0481230e
Эти переменные создаются в процессе загрузки U-boot и существуют только в оперативной памяти в виде структур данных,
для их сохранения в разделе env нужно использовать команду saveenv.
После сохранения переменных окружения командой saveenv и повторного копирования раздела env в файл
в нем появились установленные ранее командой setenv mac-адреса, а также изменились значения переменных
fileaddr и filesize
mac_addr=be:2a:9a:27:6a:3c
wifi_mac=a8:60:37:a1:ce:00
fileaddr=40000000
filesize=384036
В результате список переменных выглядит так (часть строк отформатирована для читабельности):
1) boot_fastboot=fastboot
2) boot_normal=sunxi_flash read 45000000 boot;bootm 45000000
3) boot_recovery=sunxi_flash read 45000000 recovery;bootm 45000000
4) bootcmd=run setargs_mmc boot_normal
5) bootdelay=2
6) bootreason=unknow
7) cma=64M
8) console=ttyS0,115200
9) earlyprintk=sunxi-uart,0x05000000
10) fastboot_key_value_max=0x8
11) fastboot_key_value_min=0x2
12) fdtcontroladdr=7be855e0
13) fileaddr=40000000
14) filesize=384036
15) init=/init
16) initcall_debug=0
17) keybox_list=hdcpkey,widevine
18) loglevel=2
19) mac_addr=be:2a:9a:27:6a:3c
20) mmc_root=/dev/mmcblk0p4
21) nand_root=/dev/nand0p4
22) partitions=
bootloader@mmcblk0p1:
env@mmcblk0p2:
boot@mmcblk0p3:
super@mmcblk0p4:
misc@mmcblk0p5:
recovery@mmcblk0p6:
cache@mmcblk0p7:
vbmeta@mmcblk0p8:
vbmeta_system@mmcblk0p9:
vbmeta_vendor@mmcblk0p10:
metadata@mmcblk0p11:
private@mmcblk0p12:
frp@mmcblk0p13:
empty@mmcblk0p14:
media_data@mmcblk0p15:
Reserve0@mmcblk0p16:
UDISK@mmcblk0p17
23) recovery_key_value_max=0x13
24) recovery_key_value_min=0x10
25) selinux=0
26) setargs_mmc=setenv bootargs
earlyprintk=${earlyprintk}
initcall_debug=${initcall_debug}
console=${console}
loglevel=${loglevel}
root=${mmc_root}
rootwait
init=${init}
partitions=${partitions}
cma=${cma}
snum=${snum}
mac_addr=${mac}
wifi_mac=${wifi_mac}
bt_mac=${bt_mac}
selinux=${selinux}
specialstr=${specialstr}
gpt=1
27) setargs_nand=setenv bootargs
earlyprintk=${earlyprintk}
initcall_debug=${initcall_debug}
console=${console}
loglevel=${loglevel}
root=${nand_root}
init=${init}
partitions=${partitions}
cma=${cma}
snum=${snum}
mac_addr=${mac}
wifi_mac=${wifi_mac}
bt_mac=${bt_mac}
selinux=${selinux}
specialstr=${specialstr}
gpt=1
28) snum=9c00141511d0481230e
29) wifi_mac=a8:60:37:a1:ce:00