English

Changing the power-on splash screen on the FP3+

I’m a new owner of a FP3+ and have replaced the OS with /e/OS with TWRP and Magisk. I’ve been using a FP2 with LineageOS + MicroG and various hacks for some years, so I’m reasonably familiar with boot hackery though I have had to learn new things for the FP3+ A/B boot system.

One of the things I’d like to do (not imporant) is to change the boot splash screen. I have successfully extracted the existing splash partition with
dd if=/dev/block/bootdevice/by-name/splash of=splash.img and converted to PNG using https://github.com/basxto/fp3_splash . I’ve made a replacement, converted it the other way, and pushed it into the splash partition with fastboot flash splash new-splash.img. However, it does not show up at boot time; I just get the original splash image. I’ve re-run the dd and verified that the partition contains my image. So does the FP3+ boot loader not read this partition? What might be going on?

(Pointers to the relevant bits of the source would be welcome as well.)

Thanks!

1 Like

I don’t know whether that’s the issue here, but did you take this into account?
You could determine the current slot with fastboot getvar current-slot and then force the image onto the current slot with fastboot flash splash_a new-splash.img or fastboot flash splash_b new-splash.img, respectively.

Since installing /e/ on the Fairphone 3/3+ doesn’t touch this partition, this could be the case.

A good idea, but there don’t seem to be separate A/B splash partitions. Attempting to write to splash_a or _b produces an error “partiton table doesn’t exist”, whereas writing to “splash” is OK.

1 Like

Searching the web I found references to splash_a and splash_b on other phones, so this would mean different A/B devices can handle this differently. Interesting.

Yes it would make sense. For what it’s worth, I double-checked by booting up TWRP, logging in with adb, and listing /dev/block/bootdevice/by-name. Here’s a list of all the A/B partitions, in case it’s useful to someone:

aboot_a
boot_a
cmnlib64_a
cmnlib_a
devcfg_a
dsp_a
dtbo_a
keymaster_a
lksecapp_a
mdtp_a
modem_a
product_a
rpm_a
sbl1_a
system_a
tz_a
vbmeta_a
vendor_a
1 Like

I think I can confirm this. I extracted the second stage boot loader from the aboot partition. (This is the code that implements fastboot, amongst other things.) The splash image has a magic string at the start.

$ hexdump -C splash.img | head -1
00000000  53 50 4c 41 53 48 21 21  38 04 00 00 70 08 00 00  |SPLASH!!8...p...|

Well, guess what’s in the aboot image…

$ grep 'SPLASH!!' aboot.img 
Binary file aboot.img matches

So I think the splash screen is baked into the second stage bootloader.

(I don’t know if “second stage bootloader” is proper terminology. The SOC ROM comes first, then whatever is in aboot, then whatever is in boot, as far as I can tell.)

I don’t plan to tinker with whatever is in aboot until I’m confident I can unbrick my FP3. I’ll be back…

Hi !

Any news about the splash screen update ?
I have replaced it in slash.img but have the same issue.
It´s booting and shows always the original splash.

Hello there. I managed to get Emergency Download Mode working for my FP3 using GitHub - bkerler/edl: Inofficial Qualcomm Firehose / Sahara / Streaming / Diag Tools :) , which should allow me to unbrick the phone even if I mess up a bootloader modification, but I’m afraid I got busy with more important things than the splash screen and haven’t come back to it. I’ll take another look next time I’m hacking my phone.