Tips for boot logo on ODROID-C2

The basic image format of ODROID-C2 boot logo image is as following.

Format

Image Format : 24-bit Windows BMP image or 24-bit Windows Gzipped BMP image (Without meta-data)
Image Size : 1280 by 720
Color Depth : 24bpp
File Name : 'boot-logo.bmp' or 'boot-logo.bmp.gz'

Here is the sample bmp file. boot-logo.bmp.gz

We recommend using GIMP or KolourPaint.
Here is an advanced option.

[ GIMP ]

- Export as Windows BMP
- Compatibility Options : Do not write Color Space Information
- Advanced Options : 24 bits Color
- Name : "boot-logo.bmp"

[ KolourPaint ]

- Save Image as 
- Filter : Windows BMP image
- Convert to : 24-bit Color

Size Limitation

And please keep the size of your bmp file must be under 2MB because the logo partition is limited to 2MB. Gzip BMP format is supported, so if the size is over 2MB, you can use bmp.gz file.

$ gzip boot-logo.bmp 
$ ls 
boot-logo.bmp.gz

Auto scaling option

On ODROID-C2 uboot, image scaling for boot logo is supported,
so displayed boot logo will be fixed automatically for output mode as described in boot.ini.

For example, in case of using the mode “1024x600p60hz”, boot logo will be displayed as 1024×600 even though actual size of bmp file is 1280×720.

ODROID-C2 scans the existence of the following three parts in numerical order.

  1. boot-logo.bmp in VFAT partition
  2. boot-logo.bmp.gz in VFAT partition
  3. logo data in Android LOGO partition

Android

On Android, you can replace boot logo with your custom image.

There are two ways to change boot logo image.

  1. Add a image into VFAT partition.
  2. Rewrite image data into Android LOGO partition using fastboot.

1. VFAT

Copy the new boot-logo.bmp (or boot-logo.bmp.gz) to VFAT partition.

2. Android Logo Partition

If you want to replace logo data in logo partition, please follow this guide.

First, you must get into your U-Boot command line while pressing ENTER key when your ODROID-C2 is powered up.
And execute fastboot command from U-Boot and connect with your desktop using micro USB cable.

[ ODROID-C2 Target ]

odroidc2# fastboot

Next, run fastboot command from your desktop.
[ HOST PC ]

$ fastboot flash logo boot-logo.bmp.gz
or 
$ fastboot flash logo boot-logo.bmp

If you will use bmp data on logo partition, make sure there is NO boot-logo.bmp.gz file on your VFAT area,
because U-Boot checks at first if there are boot-logo.bmp/boot-logo.bmp.gz on VFAT area and then check logo partition.

Ubuntu

With Ubuntu, display logo option is NOT included by default.
So, you need to add a boot logo image into VFAT partition.
The way using LOGO partition is not available on Ubuntu.

1080p60hz case

On U-Boot, default logo display logic works with 1080p60hz display resolution.
So you don't need to add/modify related commands,
but make sure boot logo file exists in the aforementioned locations.

Another resolution other than 1080p60hz

You should add the commands to your boot.ini before bootcmd is executed.

Please check if there is 'showlogo' command in your boot.ini first. If not so, refer to the following.

Android

showlogo ${hdmimode}

Ubuntu

# Boot Arguments
if test "${display_autodetect}" = "true"; then usb pwren; hdmitx edid; fi
if test "${m}" = "custombuilt"; then setenv cmode "modeline=${modeline}"; fi
 
### You should add the following lines after **hdmitx edid** command.
showlogo ${m}
setenv logoopt "osd1,loaded,0x3f800000,${m}"
 
# Boot Arguments - Add logo args on the existing bootargs parameter
setenv bootargs "root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro ${condev} no_console_suspend hdmimode=${m} ${cmode} m_bpp=${m_bpp} vout=${vout} fsck.repair=yes net.ifnames=0 elevator=noop disablehpd=${hpd} max_freq=${max_freq} maxcpus=${maxcpus} monitor_onoff=${monitor_onoff} disableuhs=${disableuhs} mmc_removable=${mmc_removable} usbmulticam=${usbmulticam} ${hid_quirks} logo=${logoopt}"

If you want to use a native resolution of bmp image like 1920×1080, 1024×600 (for VU7+) or 800×480 (for VU7),
please set the arg[2]/arg[3] of showlogo command as following.

odroidc2 # help showlogo
showlogo - Displaying BMP logo file to HDMI screen with the specified resolution
 
Usage:
showlogo <resolution> [<bmp_width> <bmp_height>]
        resolution - screen resoltuion on HDMI screen
                '1080p60hz' will be used by default if missing
        bmp_width (optional) - width of logo bmp file
                '1280' will be used by default if missing
        bmp_height (optional) - height of logo bmp file
                '720' will be used by default if missing

Replace boot logo image with yours as described in previous sections
and then modify 'showlogo' command in boot.ini.

Here are examples.

1. Logo image size of width 1920 and height 1080

If your monitor's resolution is 1920×1080 and you want to set a bmp file in 1920×1080,
set command in boot.ini as following.

setenv hdmimode "1080p60hz"
showlogo ${hdmimode} 1920 1080

2. Logo image size of width 1024 and height 600

setenv hdmimode "1024x600p60hz"
showlogo ${hdmimode} 1024 600

3. Logo image size of width 800 and height 480

setenv hdmimode "800x480p60hz"
showlogo ${hdmimode} 800 480

For some specific cases that VU7+ uses an extra power source, strange colors and flashing screen issue during display initialization on u-boot stage can be shown.
To remove it, the following workaround can fix it.

1. update u-boot

Click the following site to download the boot loader to fit display as 1024x600p60hz, DVI mode.

(copy tar.gz file in /media/boot and boot the C2 system)
# cd /media/boot
# tar xvfz c2_vu7plus_splash_20180720.gz
# cd ./sd_fuse
# ./sd_fusing.sh /dev/mmcblk0
(reboot)

2. setup boot.ini

Some points in boot.ini should be adjusted.

### set "display_autodetect" as "false"
setenv display_autodetect "false"

### block a default "m" and change "m" as "1024x600p60hz"
setenv m "1024x600p60hz"

### HDMI DVI/VGA modes
### set "vout" as "dvi"
setenv vout "dvi"

### turn on USB power
usb pwren

### add "logoopt"
setenv logoopt "osd1,loaded,0x3f800000,${m}"

### add "logo=${logoopt}" in "bootargs"
setenv bootargs "root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro ${condev} no_console_suspend logo=${logoopt} hdmimode=${m} ${cmode} m_bpp=${m_bpp} vout=${vout} fsck.repair=yes net.ifnames=0 elevator=noop disablehpd=${hpd} max_freq=${max_freq} maxcpus=${maxcpus} monitor_onoff=${monitor_onoff} disableuhs=${disableuhs} mmc_removable=${mmc_removable} usbmulticam=${usbmulticam} ${hid_quirks}"

3. References

4. Sample Source Codes

This section describes u-boot code change history.

In case of 1024x600p60hz, you don't need to following this section,
but refer to this section and use pre-built u-boot.
https://wiki.odroid.com/odroid-c2/application_note/software/bootlogo#update_u-boot

  • u-boot/board/hardkernel/odroidc2/odroidc2.c : in function board_late_init

https://github.com/hardkernel/u-boot/blob/odroidc2-v2015.01/board/hardkernel/odroidc2/odroidc2.c#L468

#ifdef CONFIG_DISPLAY_LOGO
	/* run_command("showlogo 1080p60hz", 0); */
	run_command("showlogo 1024x600p60hz", 0);
#endif
  • u-boot/common/cmd_showlogo.c

https://github.com/hardkernel/u-boot/blob/odroidc2-v2015.01/common/cmd_showlogo.c#L119

        /*
	if (NULL == getenv("vout_mode"))
		setenv("vout_mode", "hdmi");
        */
        setenv("vout_mode", "dvi");

In case of Android, you can use bootanimation.zip method to show your custom logo using animation.

Please refer to this reference site.
https://android.googlesource.com/platform/frameworks/base/+/master/cmds/bootanimation/FORMAT.md

The system selects a boot animation zip file from the following locations.

/system/media/bootanimation.zip
/oem/media/bootanimation.zip

Before copy process, you need to change root filesystem permission as r/w.
And copy your bootanimation.zip into /system/media/ folder.

shell@odroidc2:/ $ su
root@odroidc2:/ #
root@odroidc2:/ # mount -o rw,remount /
[  357.892532@2] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)

Samples of boot animation

Here are the sample capture videos with ODROID-C2 Android Marshmallow.

To show bootanimation samples, the following reference files are used.
Please note the sources of the files.

[ Sample 1 ]

Directory Layout
  * desc.txt
  * part0
  * part1
  * part2
  * part3
  * part4
  • desc.txt
814 214 60
c 1 30 part0
c 1 0 part1
c 0 0 part2
c 1 64 part3
c 1 15 part4

Size of png files is 814 by 214.

[ Sample 2 ]

Directory Layout
  * desc.txt
  * Part0
  * Part1
  • desc.txt
800 1280 24
p 1 0 Part0
p 0 0 Part1

Size of png files is 800 by 1280.