Replace UEFI boot splash screen/logo (Jetpack 5.0.1 / R35.1)

Hi NVIDIA,
I would like to change the UEFI boot splash screen logo on my Xavier NX production module. I have looked into the information provided in the following posts:

UEFI Adaptation - Customized Logo
Customized Logo for Xavier NX
Replace items after build UEFI image
Jetson Xavier NX L4T 35.1 suppress bootloader messages on THS0

and have tried the following on my host machine (Ubuntu 20.04):
logo_files.zip (12.0 KB)

Customized Logo for Xavier NX - #11 by WayneWWW

Home · NVIDIA/edk2-nvidia Wiki · GitHub

Make sure all required software components are present

sudo apt -y install git python3 python3-setuptools python3-pip

Create directory and enter it

mkdir -p ~/Downloads/edkrepo
cd ~/Downloads/edkrepo

Get EDK2-source and extract

wget https://github.com/tianocore/edk2-edkrepo/releases/download/edkrepo-v2.1.2/edkrepo-2.1.2.tar.gz
tar xvf edkrepo-2.1.2.tar.gz

Install

sudo ./install.py --user ${USER}
cd …

Change owner of hidden folder and files

sudo chown -R ${USER}. ~/.edkrepo

Configure edkrepro

edkrepo manifest-repos add nvidia GitHub - NVIDIA/edk2-edkrepo-manifest: NVIDIA fork of tianocore/edk2-edkrepo-manifest main nvidia

Create workspace

edkrepo clone nvidia-uefi NVIDIA-Jetson main

Build UEFI

cd nvidia-uefi

Install requirements

sudo apt update
sudo apt -y install build-essential uuid-dev git gcc python3 virtualenv gcc-aarch64-linux-gnu device-tree-compiler

Install Mono

sudo apt -y install mono-complete

Install nuget

sudo apt -y instal nuget

Provide information on how to proceed

echo “[INFO]: Add custom UEFI splah screen images to:”
echo “[INFO]: ~/Downloads/nvidia-uefi/edk2-nvidia/Silicon/NVIDIA/Assets/”
echo “”
echo “[INFO]: Modify Open the following file for editing:”
echo “[INFO]: ~/Downloads/nvidia-uefi/edk2-nvidia/Platform/NVIDIA/NVIDIA.fvmain.fdf.inc”
echo "[INFO]: Search for ‘logo files’ and change the image names to point to "
echo “[INFO]: the new UEFI splash screen images.”

Build the Jetson platform with Stuart

echo “”
echo “[INFO] Execute the following command to build the new UEFI image:”
echo “[INFO] bash edk2-nvidia/Platform/NVIDIA/Jetson/build.sh”

Rename release image

echo “”
echo “[INFO]: Copy the new image file:”
echo “[INFO]: ~/Downloads/nvidia-uefi/images/uefi_Jetson_RELEASE.bin”
echo “[INFO]: to:”
echo “[INFO]: <base_dir>/Linux_for_Tegra/bootloader/uefi_jetson.bin”
echo “”
echo “[INFO]: Now the bootloader partition can be flashed using:”
echo “[INFO]: sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit-emmc mmcblk0p1”

I have attached the two logo files that I have been using, and the modification in “NVIDIA.fvmain.fdf.inc” looks like:

Logo Files

FILE FREEFORM = gNVIDIAPlatformLogoGuid {
SECTION RAW = Silicon/NVIDIA/Assets/frontmatec-logo-480.bmp
SECTION RAW = Silicon/NVIDIA/Assets/frontmatec-logo-720.bmp
# SECTION RAW = Silicon/NVIDIA/Assets/nvidiagray480.bmp
# SECTION RAW = Silicon/NVIDIA/Assets/nvidiagray720.bmp
# SECTION RAW = Silicon/NVIDIA/Assets/nvidiagray1080.bmp

After making the above changes and flashing the device, I now get a quick which flash upon booting, but no logo and no messages (as those described in Jetson Xavier NX L4T 35.1 suppress bootloader messages on THS0).

Do you have any suggestions why it is not working? What am I doing wrong or what is missing?
Thanks.

hi hetfood6,

Could you build the UEFI image successfully and replace uefi_jetson.bin in Linux_for_Tegra/bootloader/uefi_jetson.bin after you finish the above steps?

Could you also help to add the logo image with 1080p?

SECTION RAW = Silicon/NVIDIA/Assets/frontmatec-logo-1080.bmp

Hi KevinFFF,
As suggested, I added a third image to the “…/nvidia-uefi/edk2-nvidia/Silicon/NVIDIA/Assets” folder and added the suggested line in the “…/nvidia-uefi/edk2-nvidia/Platform/NVIDIA/NVIDIA.fvmain.fdf.inc”.

After removing the “Build”, “Conf” and “images” folders in the “nvidia-uefi” root, I executed the “build.sh” again and then copied the new “…/nvidia-uefi/images/uefi_Jetson_RELEASE.bin” to “…/Linux_for_Tegra/bootloader/uefi_jetson.bin” as previously described.

I then did a new flash, initially only flashing the “cpu-bootloader” partition, and then a full flash, but the result remains the same:

  • An initial delay with a black screen
  • A short flicker of a completely white screen
  • And then the normal boot messages

I then tried to remove “-” from image file names - long shot, but maybe that could make a difference, but it didn’t. So in short, it still doesn’t work.

Could you replace nvidiagray480.bmp with your frontmatec-logo-480.bmp (and also720 and 1080)?
In other words, use the original name(nvidiagrayXXX.bmp) for your logo file.

So, can your board boot up as normal?

I tried to rename my logo files/overwrite original files as suggested. But the result remains the same - no splash screen just a flicker of a blank screen.

And to answer the second question: Yes, it otherwise boots normally!

Wanting to verify that it is not a glitch in the flash-process, I reverted back to the original “…/Linux_for_Tegra/bootloader/uefi_jetson.bin” file and flashed the device. Now the original NVIDIA splash screen is show. So the flashing itself works as expected.

As a third test, I now completely deleted the “…/nvidia-uefi” directory and cloned it again, and WITHOUT CHANGING ANYTING, I executed the build-script, updated the “uefi_jetson.bin” file in the “bootloader” folder and then flashed my device again.
And as before, I see a white flash instead of the (NVIDIA) splash screen.

Clearly something in the UEFI-build process is no working as expected. I have attached the “BUILDLOG_Jetson.txt” (as a ZIP-file), in case any useful information can be extracted from this.
BUILDLOG_Jetson.zip (167.5 KB)

How did you update uefi_jetson.bin to the board?
You could flash UEFI only with the following command.

$ sudo ./flash.sh -k cpu-bootloader <config> mmcblk0p1

Do you have Xavier NX devkit and try to reproduce the same behavior on the devkit?

Or you could provide the logo image files here. (there’s no 1080 logo file above)

Please find all three splash logo images attached. As you can see, the file sizes are identical to those of the original files.
fmt_logo_files.zip (37.0 KB)
Regarding the logo-files, please keep in mind, that i my previous reply, I tried to build the “uefi_jetson.bin” using the ORIGINAL NVIDIA LOGO FILES. And still it didn’t work when I had flashed the device. So I think it is not my logo-files that are the problem.

When it comes to flashing commands, I have tried:

$ sudo ./flash.sh jetson-xavier-nx-devkit-emmc mmcblk0p1
$ sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit-emmc mmcblk0p1

They both produce the same result.

Unfortunately I don’t have a development kit readily available, but I will see if I can find one.

I’ve just verified that the logo files from you could be replaced on Xavier NX devkit with Jetpack 5.0.2 (R35.1).

Step 1. Download UEFI source

$ cd $HOME
$ edkrepo clone nvidia-uefi NVIDIA-Jetson main

Step 2. Replace logo file

$ cp frontmatec-logo-480.bmp ~/nvidia-uefi/edk2-nvidia/Silicon/NVIDIA/Assets/nvidiagray480.bmp
$ cp frontmatec-logo-720.bmp ~/nvidia-uefi/edk2-nvidia/Silicon/NVIDIA/Assets/nvidiagray720.bmp
$ cp frontmatec-logo-1080.bmp ~/nvidia-uefi/edk2-nvidia/Silicon/NVIDIA/Assets/nvidiagray1080.bmp

Step 3. Build UEFI

$ . edk2-nvidia/Platform/NVIDIA/Jetson/build.sh

Step 4. Replace UEFI binary

$ cd <Linux_for_Tegra>
$ cp ~/nvidia-uefi/images/uefi_Jetson_RELEASE.bin bootloader/uefi_jetson.bin

Step 5. Update bootloader partition only

$ sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit-emmc mmcblk0p1

I had all the same issues. I tracked down a solution. The NVIDIA logos are BMP3 images. I was making BMP images. I was taking a png, and converting it with imagemagick.

convert -resize 1920X1080! untitled.png ./nvidia-uefi/edk2-nvidia/Silicon/NVIDIA/Assets/nvidiagray1080.bmp

I do this and it works great!

convert -resize 1920X1080! untitled.png BMP3:./nvidia-uefi/edk2-nvidia/Silicon/NVIDIA/Assets/nvidiagray1080.bmp

Thank you for your suggestion, @jake6.
I checked my image-files info using ImageMagic “identify -verbose” and compared them to the matching “nvidiagray.bmp” files. My files looks to be BMP3, but apart from colors there are still some minor differences (Nvidia image file to the left, and my image file to the right:

and towards the bottom of the file, there is also a difference:

I don’t know if these difference are important, but I will try to create new images, using the suggested method, and then see if that makes any difference.

@KevinFFF, what you suggest I have tried multiple times, both using my own file names, and updating the “NVIDIA.fvmain.fdf.inc” in the “Platform” folder, as well as copying my files to the original Nvidia file names in the “Silicon” sub-folder. Regardless, the result has remained the same.

I will try to create new image files, as suggested by @jake6, and then see if I can make it work with these (even thought it sounds like you have been successful changing the splash screen with my images).

Should it make any difference if it is a SD-card devkit-version, or the eMMC production version? I have not had the opportunity to test with the SD-card devkit-version.

@hetfood6 , I have only tested with Jetson 5.1 (flashing from Ubuntu18 and 20), to the emmc. I cant get my m.2s to work, so im not going to even try haha.

The customized logo is showed in UEFI, it should not relate to SD or eMMC module.
So, have you tried the above steps on Xavier NX eMMC devkit?

For my verification, I didn’t update this file (NVIDIA.fvmain.fdf.inc).
I only replaced the original logo files with yours.

So I tried it all again, as described including an attempt when I don’t change anything (regarding images). And the short version is: I am never able to build a “uefi_Jetson_RELEASE.bin” that works! So there is something with build-environment which is not right!!!

I don’t know if anything useful can be extracted from it, but starting from scratch (deleting and re-cloning “nvidia-uefi”) and NOT making any changes at all, I have attached the build log files (along with a dump of the complete build output):
build_logs.zip (513.5 KB)

Unfortunately (or not) I am going on vacation for the next week, so after today I won’t be able to do any more testing before Monday Feb.20.

Thanks.

Hi hetfood6,
Could you help to replace the <Linux_for_Tegra>/bootloader/uefi_jetson.bin with uefi_jetson .bin (2.7 MB).

Enter forced recovery mode and update with the following command.

$ sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit-emmc mmcblk0p1

This is really strange: the result remains the same - still not working!
The “md5sum” of the downloaded file is: 24d03352f21af7a9a20fd3fab79b3030

I started from scratch:

#!/bin/bash

SCRIPT_PATH=${PWD}

SAMPLE_FS_PATH=~/Downloads/nvidia_sample_file_system_502
mkdir -p ${SAMPLE_FS_PATH} && cd ${SAMPLE_FS_PATH}

############################ DEFINE VARIABLES ############################
echo "[INFO]: Define local variables..."
JETPACK_VERSION=35.1.0
RELEASE_VERSION=r35_release_v1.0

L4T_RELEASE_PACKAGE=jetson_linux_r${JETPACK_VERSION}_aarch64.tbz2
SECURE_BOOT_PACKAGE=secureboot_r${JETPACK_VERSION}_aarch64.tbz2
SAMPLE_FS_FILE=sample_fs.tbz2

############################ DOWNLOAD PACKAGES ############################
echo "[INFO]: Downloading NVIDIA packages..."
wget https://developer.nvidia.com/embedded/l4t/${RELEASE_VERSION}/release/${L4T_RELEASE_PACKAGE}
sudo tar xpvf ${L4T_RELEASE_PACKAGE}

wget https://developer.nvidia.com/embedded/l4t/${RELEASE_VERSION}/release/${SECURE_BOOT_PACKAGE}
sudo tar xpvf ${SECURE_BOOT_PACKAGE}

############################ MINIMAL SAMPLE FILE SYSTEM ############################
cd ${SAMPLE_FS_PATH}/Linux_for_Tegra/tools/samplefs
echo "[INFO]: Building minimal root file system..."
sudo ./nv_build_samplefs.sh --abi aarch64 --distro ubuntu --flavor minimal --version focal
cp ${SAMPLE_FS_FILE} minimal_${SAMPLE_FS_FILE}

cd ${SAMPLE_FS_PATH}/Linux_for_Tegra/rootfs/
echo "[INFO]: Removing old root file system and extracting minimal root file system..."
sudo rm -rf ./*/
sudo tar xpvf ${SAMPLE_FS_PATH}/Linux_for_Tegra/tools/samplefs/minimal_${SAMPLE_FS_FILE}

############################### FINALIZE FILE SYSTEM ###############################
cd ${SAMPLE_FS_PATH}/Linux_for_Tegra
echo "[INFO]: Applying binaries..."
sudo ./apply_binaries.sh

cd ${SAMPLE_FS_PATH}/Linux_for_Tegra/tools/
echo "[INFO]: Creating default user and enabling autologin..."
sudo ./l4t_create_default_user.sh -u username -p password -n nx-emmc-test --accept-license --autologin

############################### UPDATE BOOTLOADER IMAGE ###############################
cd ${SAMPLE_FS_PATH}/Linux_for_Tegra/bootloader
echo "[INFO]: Backing up and replacing UEFI boot splash screen"
sudo cp uefi_jetson.bin uefi_jetson.bin.bak
wget https://forums.developer.nvidia.com/uploads/short-url/x8BuQyzAZ7VhnFIykM167fDwFIx.bin -O uefi_jetson.bin

############################### FLASH JETSON ###############################
cd ${SAMPLE_FS_PATH}/Linux_for_Tegra
echo "[INFO]: Flashing internal memory..."
sudo ./flash.sh jetson-xavier-nx-devkit-emmc mmcblk0p1

cd ${SCRIPT_PATH}

This produces the same black/white boot screen with no logo. If I do the following:

echo "[INFO]: Restoring original UEFI boot splash screen"
cd ${SAMPLE_FS_PATH}/Linux_for_Tegra/bootloader
sudo cp uefi_jetson.bin.bak uefi_jetson.bin

sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit-emmc mmcblk0p1

The original splash screen is being restored.

Reading through the above script, it just struck me, that I am adding “secureboot” to my system. Is that part of my problem? Is there a signature or something that is missing/needs to be updated prior to flashing???

I figured I could answer my own question, by starting from scratch with the above script, but removing all references to “secureboot”.
But again, the result remains the same - still now working.

@KevinFFF: Have you had time to inspect the above script where I create a “minimal file system” and whether that has any relation to the issues that I am experiencing. I am still not able to change the boot-splash image.
Thanks.

Hi hetfood6,

Could it work with my provided uefi_jetson.bin and w/o any “secureboot” option in your script?

To narrow down the problem, could you help to use Sample Root Filesystem from Jetson Linux 35.1 | NVIDIA Developer and replace my uefi_jetson.bin in your case?

Hi KevinFFF,
I created a new folder to start from scratch, and downloaded the “Driver Package (BSP)” and the “Sample Root FIlesystem”:

https://developer.nvidia.com/embedded/l4t/r35_release_v1.0/release/jetson_linux_r35.1.0_aarch64.tbz2
https://developer.nvidia.com/embedded/l4t/r35_release_v1.0/release/tegra_linux_sample-root-filesystem_r35.1.0_aarch64.tbz2

I then extracted the BSP and and the sample file system to the “rootfs” folder. Finally I:

  • “applied binaries”

  • copied “bootloader/uefi_jetson.bin” to “bootloader/uefi_jetson.bin.bak”

  • substituted “bootloader/uefi_jetson.bin” with your “uefi_jetson.bin” file (MD5: 24d03352f21af7a9a20fd3fab79b3030)

I then flashed the my device:
sudo ./flash.sh jetson-xavier-nx-devkit-emmc mmcblk0p1

As before, this “broke” the boot splash screen!

If I “restore” uefi_jetson.bin" using the “.bak” file, and then flash the device using:
sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit-emmc mmcblk0p1
it again works as expected.

So no, I am not able to use your “uefi_jetson.bin” file to change the boot splash screen.