Команды U-Boot

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

  editenv    env      printenv      run    saveenv    setenv    setexpr  

printenv *


Вывод переменных окружения (print environment variables)

Help: => help printenv printenv - print environment variables Usage: printenv [-a] - print [all] values of all environment variables printenv name ... - print value of environment variable 'name' =>

  • 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
    

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

    => printenv boot_fastboot=fastboot boot_normal=sunxi_flash read 45000000 boot;bootm 45000000 boot_recovery=sunxi_flash read 45000000 recovery;bootm 45000000 bootcmd=run setargs_mmc boot_normal bootdelay=2 bootreason=unknow cma=64M console=ttyS0,115200 earlyprintk=sunxi-uart,0x05000000 fastboot_key_value_max=0x8 fastboot_key_value_min=0x2 fdtcontroladdr=7be855e0 fileaddr=7c2b1780 filesize=2e71c init=/init initcall_debug=0 keybox_list=hdcpkey,widevine loglevel=2 mmc_root=/dev/mmcblk0p4 nand_root=/dev/nand0p4 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 recovery_key_value_max=0x13 recovery_key_value_min=0x10 selinux=0 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 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 snum=9c00141511d0481230e Environment size: 1603/131068 bytes