How to flash uboot with uuu in recovery mode

Hi, I am using an Apalis iMX8 with Yocto Linux but eventually would transition to VxWorks. I don’t want to use the Easy Installer program. Is there a faster way to just use uuu in recovery mode?

After building the Yocto image, I tried “uuu -b emmc imx-boot” to flash the uboot. However, uuu doesn’t say Success and uboot hangs at:


We are in is_imx8
Getting phy ctrl

Any help would be appreciated. Thank you


Hi, I’m the Toradex AI Assistant. I’m in early beta, and I would appreciate your feedback.
The Toradex Support team will follow up with you shortly!


Hello,

I understand you’re experiencing issues flashing U-Boot on an Apalis iMX8 using uuu in recovery mode and facing a hang during the process.

For flashing U-Boot on an Apalis iMX8 without using the Toradex Easy Installer and opting for the uuu (Universal Update Utility) tool, it’s crucial to ensure a few steps are correctly followed. The issue you’re encountering, where uuu doesn’t report success and U-Boot hangs, might be due to several factors, including the version of the uuu tool, the U-Boot binary compatibility, or the specific commands used.

  1. Ensure Compatibility: First, ensure that the version of uuu you are using is compatible with the Apalis iMX8. It’s recommended to use the latest version of the uuu tool, as it includes fixes and improvements that might be necessary for the Apalis iMX8.

  2. Prepare the Binary: Make sure the U-Boot binary (imx-boot) you’re trying to flash is correctly built for the Apalis iMX8 and is intended for use with the uuu tool. The binary should include the necessary configurations for your target device.

  3. Use Correct uuu Commands: The command uuu -b emmc imx-boot might not be fully appropriate for your scenario. Typically, the uuu command sequence for flashing a device like the Apalis iMX8 involves specifying the U-Boot binary along with a script or command file that includes the necessary instructions for flashing. A more detailed command might look like this:

    uuu -v imx-boot
    

    However, this is a simplified example. The actual command can vary based on the specific files and configurations used in your Yocto build.

  4. Check the Connections: Ensure that your connection setup between the Apalis iMX8 and your host computer is correct. The device should be in recovery mode, and the serial connection should be properly established to facilitate the flashing process.

  5. Review the Logs: The output and error messages from uuu can provide valuable insights into what might be going wrong. If uuu doesn’t say “Success,” there should be error messages or logs indicating the point of failure.

  6. Power Cycle: As mentioned in your context, after flashing, it’s important to power cycle the module instead of just resetting it. This ensures that the device exits recovery mode correctly and starts with the newly flashed U-Boot.

If after following

Please, also check if these links can help you solve your problem:

VFxx Recovery Mode | Toradex Developer Center.


How did you like my response?

:+1: :-1:

You can download the Toradex Easy Installer via USB OTG (please note that this step does not flash anything to eMMC; everything is loaded and run entirely in RAM). Then, you can use the Toradex Easy Installer to flash anything, including U-Boot. The image gets flashed according to the configuration in the image.json file. If you wish to flash only U-Boot, you can download any Toradex pre-built image and modify the json file to include only the U-Boot-related entries. Afterward, place that image on an SD card or USB stick and use it to flash your device.

Hi Alex, thanks for you response. Unfortunately the process you provided is not very convenient. I plan on developing uboot to work with VXworks. This process might make me program uboot 100 times before I get things right. A more efficient work flow would to just use uuu directly.

Thanks

I don’t see any contradiction with the method we suggested, but if you believe that directly using the uuu tool is more effective, we certainly won’t prohibit its use. Unfortunately, I can’t assist you with this since we have no experience with the flashing capabilities of the uuu tool. We only use it for RAM downloads.

Thanks for your help. It’s a shame that Toradex is shoving everyone into a corner with only one option (Easy Installer). Other companies have options and try to work with the customer. It’s unfortunate that I didn’t have a better experience with Toradex. I will be trying out other vendors. Thanks

1 Like

Hi @dtran11 ,

I think there may be some misunderstanding here. We do not block anyone from using uuu. Toradex Easy Installer is loaded using uuu so its just a matter of maybe getting to know how to use the tool. It is true that few if any of us may exactly know how to use uuu directly and that is why Alex was mentioning it may be hard to support there especially as its not standard for us. Easy Installer has a lot of benefits to it, it may seem the functionality is restrictive but it actually enables faster prototyping as well as programming at scale tools.

I can also add that I believe other customers on other platforms that had WindRiver prepare a VxWorks port for them may have even been able to provide a Toradex Easy Installer compatible image that could then be flashed quickly in production.

But all this said since you already invested a lot of time looking at our solutions and I think there are still a lot of benefits you would get from using our solutions maybe we can explore this further by going deeper on the subject with you. If OK I will reach out by email putting you in contact with some engineers.

Best regards,

2 Likes

I would really appreciate that. Thank you

Hello @dtran11,
It would be nice to know what you’re trying to achieve. Are you trying to just boot U-Boot for testing or are you trying to flash a new U-Boot on the eMMC?

I don’t want to use the Easy Installer program. Is there a faster way to just use uuu in recovery mode?

For recovery (maybe even faster development), you can use uuu to send a new U-Boot image without flashing it and boot it from RAM. That’s what we do with the Easy Installer booting from USB. To see exactly what we do, you can download the easy installer package from here and uncompress it. Inside the uncompressed folder, you’ll see a recovery directory that contains both the uuu binary and the uuu.auto file which is automatically loaded when uuu is called with no arguments.

This file contains the uuu script we use to load a u-boot binary and boot it from RAM. You can use it as reference for what’s needed to boot from RAM. Flashing stuff to eMMC from uuu is not something we do internally, but as far as I know, nothing is preventing you from doing it.
You’ll need to set up the uuu script to write everything to the proper locations. When you call uuu -b emmc, you’re instructing uuu to use a specific script that comes bundled with the binary. You can check the contents of this script by running:

uuu -bshow emmc

On my setup here it showed:

 ~  toradex  easy_installer  Apalis-iMX8X_ToradexEasyInstaller_5.3.0+build.3  1  ./recovery/uuu -bshow emmc
uuu (Universal Update Utility) for nxp imx chips -- libuuu_1.4.127-0-g08c58c9


uuu_version 1.2.39

# @_flash.bin            | bootloader
# @_image   [_flash.bin] | image burn to emmc, default is the same as bootloader

# 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 bootloader _image
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

As you can see from this script, a U-Boot image is being loaded to RAM, booted and then fastboot commands are being used to send commands directly to u-boot, and it’s u-boot that’s writing to the eMMC.
If you want to go this route, you’ll have to write the uuu script that does the same thing. You could start with our uuu.auto script and our U-Boot image from Easy Installer, as this will get you a working U-Boot loaded from RAM. From there you could customize the fastboot commands to achieve the U-Boot flashing you need.

Additionally, it should be possible to use the Easy Installer to install your VxWorks image. Easy installer supports writing RAW images to partitions and to create partition tables. You just need to create your custom image.json to execute the operations you need. Here’s a reference of the options that are available in image.json:

By taking the easy installer route you will be able to install your images automatically on the factory, given that all our modules come preinstalled with the Easy Installer.

Please let me know if you have more questions,
Rafael

Thanks for the great tips. I really appreciate it. I will follow this guide to get started. Thanks again.

Hi dtran11,

Any success with this? I am also trying to flash my yocto build without easy installer using uuu.

Many thanks,
Matas

Hi @Matas

Unfortunately, we do not support flashing of an image without Toradex Easy Installer. The reason is that having a Linux available to setup the board gives you much more flexibility.

However, if really required you might want to load your own boot script to the booloader. For that we have a look to the uuu.auto script provided by Toradex Easy Installer:

uuu_version 1.4.127

SDPS: boot -f ../imx-boot
CFG: FB: -vid 0x0525 -pid 0x4000
CFG: FB: -vid 0x0525 -pid 0x4025
CFG: FB: -vid 0x0525 -pid 0x402F
CFG: FB: -vid 0x0525 -pid 0x4030
CFG: FB: -vid 0x0525 -pid 0x4031
CFG: FB: -vid 0x0525 -pid 0x4043
FB: ucmd setenv fastboot_buffer 0x82e00000
FB: download -f ../boot-tezi.scr
FB: ucmd setenv fastboot_buffer 0x82e10000
FB: download -f ../overlays.txt
FB: ucmd setenv fastboot_buffer 0x9c000000
FB: download -f ../hdmitxfw.bin
FB: ucmd setenv fastboot_buffer 0x8a000000
FB: download -f ../tezi.itb
FB: acmd source 0x82e00000
FB: done

You can define what boot-tezi.scr should be and create your own script. Check the article Distro Boot | Toradex Developer Center for more information.

In there you would now have to define your own bootcommand that does the programming according to your setup.

boot-tezi.cmd (untested, needs to be adapted to your setup):

env set bootcmd "mmc dev 0 1; mmc write <imx-boot address> 0 <imx-boot size>; mmc dev 0 0; mmc write <image address> 0 <image size>;
run bootcmd

Then the uuu.auto file could look something like this.

uuu.auto (untested, needs to be adapted for your use case):

uuu_version 1.4.127

SDPS: boot -f ../imx-boot
CFG: FB: -vid 0x0525 -pid 0x4000
CFG: FB: -vid 0x0525 -pid 0x4025
CFG: FB: -vid 0x0525 -pid 0x402F
CFG: FB: -vid 0x0525 -pid 0x4030
CFG: FB: -vid 0x0525 -pid 0x4031
CFG: FB: -vid 0x0525 -pid 0x4043
FB: ucmd setenv fastboot_buffer 0x82e00000
FB: download -f ../boot-tezi.scr
FB: ucmd setenv fastboot_buffer <imx-boot address>
FB: download -f <imx-boot>
FB: ucmd setenv fastboot_buffer <image address>
FB: download -f <image>
FB: acmd source 0x82e00000
FB: done

The image could e.g. be a wic image file.

However, normally this approach is much slower because you can’t use any compression and because you transfer a whole wic image file. This is why we do not recommend this approach at all. Also be careful when manually flashing, you should not destroy the config block (512 Byte at the end of the first boot partition):
https://git.toradex.com/cgit/u-boot-toradex.git/tree/board/toradex/apalis-imx8/Kconfig?h=toradex_imx_lf_v2022.04

Regards,
Stefan