U-boot Environment Offset i.MX8MP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

U-boot Environment Offset i.MX8MP

Jump to solution
6,814 Views
GrzesiakLu
Contributor II

Hello!
I am currently struggling with reading from and to the U-boot environment from Linux on edm-g-imx8mp board from Technexion. I have build the U-boot binary using U-boot-tn-imx Yocto repository provided by Technexion and later attempted to build u-boot firmware utils. I have managed to pinpoint my issue to be related to placement of the U-boot+SPL, and some other imx8mp binaries on the eMMC drive.

To provision the device I am using UUU ( Universal Update Utility) to firstly flash the aforementioned imx-boot binary (as it was created via U-boot recipe in Yocto Project) followed by .wic.bz2 file containing another copy of bootloader as well as /boot and /rootFS partitions as describbed by the imx-boot-bootpart.wks file in Yocto Project. The contents of .wks file are shown below.

# short-description: Create SD card image with a boot partition 
# long-description: 
# Create an image that can be written onto a SD card using dd for use 
# with i.MX SoC family 
# It uses u-boot + other binaries gathered together on imx-boot file 
# 
# The disk layout used is: 
# - ---------- -------------- -------------- 
# | | imx-boot | boot | rootfs | 
# - ---------- -------------- -------------- 
# ^ ^ ^ ^ ^ 
# | | | | | 
# 0 | 8MiB 72MiB 72MiB + rootfs + IMAGE_EXTRA_SPACE (default 10MiB) 
# 32 32 or 33kiBsee reference manual
# 
part u-boot --source rawcopy --sourceparams="file=imx-boot" --ondisk mmcblk --no-table --align 32 
part /boot --source bootimg-partition --ondisk mmcblk --fstype=vfat --label boot --active --align 8192 --size 64 
part / --source rootfs --ondisk mmcblk --fstype=ext4 --label root --align 8192 
  
bootloader --ptable msdos 

 

My issue is now that when I restart the device the U-boot environment that is being read mismatches the U-boot environment pointed to by sbin/fw_printenv and sbin/fw_setenv. I am aware of the fact that the memory addresses these point to can be dynamically changed at runtime via changes to the /etc/fw_env.config file. I am however unable to determine correct offset and size values for the edm-g-imx8mp board. Additionally the values as generated by fw-utils recipe are incorrect and have to be adjusted. The contents of the fw_env.config follow below:

# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
# Futhermore, if the Flash sector size is omitted, this value is assumed to
# be the same as the Environment size, which is valid for NOR and SPI-dataflash
# Device offset must be prefixed with 0x to be parsed as a hexadecimal value.

# NOR example
# MTD device name Device offset Env. size Flash sector size Number of sectors
/dev/mtd1 0x0000 0x4000 0x4000
/dev/mtd2 0x0000 0x4000 0x4000

# MTD SPI-dataflash example
# MTD device name Device offset Env. size Flash sector size Number of sectors
#/dev/mtd5 0x4200 0x4200
#/dev/mtd6 0x4200 0x4200

# NAND example
#/dev/mtd0 0x4000 0x4000 0x20000 2

# On a block device a negative offset is treated as a backwards offset from the
# end of the device/partition, rather than a forwards offset from the start.

# Block device example
#/dev/mmcblk0 0xc0000 0x20000
#/dev/mmcblk0 -0x20000 0x20000

# VFAT example
#/boot/uboot.env 0x0000 0x4000

# UBI volume
#/dev/ubi0_0 0x0 0x1f000 0x1f000
#/dev/ubi0_1 0x0 0x1f000 0x1f000

# UBI volume by name
#/dev/ubi0:env 0x0 0x1f000 0x1f000
#/dev/ubi0:env-redund 0x0 0x1f000 0x1f000

Commenting out the mtd1 and mtd2 devices and changing the mmblk0 to be mmcblk2 along with inserting offset and size as defined in u-boot-tn-imx-fw-utils/git/configs/edm-gimx8mp_defconfig repeated below, result in me being able to write and read from U-boot environment on Hardware User Space Partition i.e mmcblk2

CONFIG_ENV_SIZE=0x1000
CONFIG_ENV_OFFSET=0x400000

This however is not the U-boot environment that the device uses at boot-up. I am unaware where the start-up U-boot environment is on the MMC flash memory. Based on the output of the mmc_burn_all.lst file shown below. The U-boot binary is being flashed to the mmblk2boot0 partition. After doing some reading I found out that the U-boot environment in many cases is then present on the mmcblk2boot1, but I am unable to verify that. Contents of the mmc_burn_all.lst are shown below:

uuu_version 1.2.39

# This command will be run when i.MX6/7 i.MX8MM, i.MX8MQ
SDP: boot -f _flash.bin

# This command will be run when ROM support stream mode
# i.MX8QXP, i.MX8QM
SDPS: boot -f _flash.bin

# These commands will be run when use SPL and will be skipped if no spl
# SDPU will be deprecated. please use SDPV instead of SDPU
# {
SDPU: delay 1000
SDPU: write -f _flash.bin -offset 0x57c00
SDPU: jump
# }

# These commands will be run when use SPL and will be skipped if no spl
# if (SPL support SDPV)
# {
SDPV: delay 1000
SDPV: write -f _flash.bin -skipspl
SDPV: jump
# }

FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: ucmd mmc dev ${emmc_dev}
FB: flash -raw2sparse all _rootfs.sdcard
FB: flash bootloader _flash.bin
FB: ucmd if env exists emmc_ack; then ; else setenv emmc_ack 0; fi;
FB: ucmd mmc partconf ${emmc_dev} ${emmc_ack} 1 0
FB: done

Could somebody provide me with correct values for the fw_env.config file so that I can read and write to the U-boot environment placed in either mmcblk2boot0 or mmcblk2boot1 partitions?

0 Kudos
1 Solution
6,797 Views
BiyongSUN
NXP Employee
NXP Employee

doesn't matter the bootloader (flash.bin) boot from eMMC one of two boot partitions or from user partition. 

The u-boot environment is always saved to  user partition. 

 /etc/fw_env.config  should be 

/dev/mmcblk2 0x400000 0x1000

 

just one line is enough.

View solution in original post

0 Kudos
2 Replies
6,798 Views
BiyongSUN
NXP Employee
NXP Employee

doesn't matter the bootloader (flash.bin) boot from eMMC one of two boot partitions or from user partition. 

The u-boot environment is always saved to  user partition. 

 /etc/fw_env.config  should be 

/dev/mmcblk2 0x400000 0x1000

 

just one line is enough.

0 Kudos
6,787 Views
GrzesiakLu
Contributor II

You are right it was my oversight that caused me to be confused. When setting an environment via fw_setenv and subsequently printing it via fw_printenv the variables are displayed at the bottom of the printout block. However when calling printenv from u-boot command line the variables are displayed at the top of the prinout block.

Thank you for your answer!

0 Kudos