Customize bootloader splash screen for non x86 targets

3.9k views Asked by At

I'm building an OS in Windows CE 6.0R3 targeted for the ARM9 architecture (Specifically it's for the iMX28 series) and I'd like to change the boot screen to display a custom image when the device is first booted up.

How can I do this? I read through some rather vague and sparse bits of documentation that suggest you need to create it in the .bmx format and enable video, but nowhere do I see how to actually change the splash screen shown when the device is booted up.

2

There are 2 answers

2
ctacke On BEST ANSWER

It depends. Generally speaking it's the bootloader that controls initialization of the display controller and sending data to the controller for the initial image that appears before the OS is loaded and it's display driver takes over. In a typical x86 target device using the out-of-the-box BIOS bootloader that ships with Platform Builder, it will load the splash.bmx (a compressed BMP) and display that.

In all ARM-based cases I'm aware of, BIOS bootloader is not what is used to load the image, but instead is a BSP or vendor-specific loadr. I've seen a variety of things from custom OEM bootloaders to derivatives of redboot. In those cases, you have to know how the bootloader is set up to display a splash image and how to configure it (if you even can - some are hard-coded).

Since we don't know what bootloader you're using, I won't even hazard a guess as to the specifics for how yours works. Your best bet is to either check with your platform documentation and see if it's described, or check with the OEM. If you happen to be the OEM, you'll have to look into the source code for whatever bootloader you are using.

0
Mike Bailey On

After looking into what ctacke recommended, I found that for the iMX28-eVK-PDK1_9 BSP that was used in my OS project I needed to modify the code within display.c.

Specifically, it was found within the platform project under iMX28-EVK-PDK1_9\SRC\BOOTLOADER\COMMON\display.c. The function ShowBmp was used to load the bitmap from a fixed in memory location. I had to adjust the code for ShowBmp to instead write the desired bitmap to the screen instead of the default Freescale image.

By default, ShowBmp reads from a memory location a bitmap image and writes it pixel by pixel to the device screen. The only thing we really changed was that we were reading from our memory location instead.