Configuring the boot splash screens
From Openmoko
(+links) |
|||
(4 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
− | There are three boot screens (also called splashes or splash screens) as of 13 Nov. 2007. The U-Boot splash is displayed until the kernel takes over. Presumably the kernel will eventually display a splash while it boots. When userspace initializes, psplash displays a splash. Finally X displays a splash when it starts. | + | There are three boot screens (also called splashes or splash screens) as of 13 Nov. 2007. The [[U-Boot]] splash is displayed until the kernel takes over. Presumably the kernel will eventually display a splash while it boots. When userspace initializes, psplash displays a splash. Finally X displays a splash when it starts. |
− | === U- | + | === [[U-Boot]] Splash === |
Werner's README states the following: | Werner's README states the following: | ||
Line 109: | Line 109: | ||
== See also == | == See also == | ||
− | |||
* [[Themes]] | * [[Themes]] | ||
* [[Edje]] | * [[Edje]] | ||
− | [[Category: | + | [[Category:Middleware settings]] |
Latest revision as of 11:02, 10 February 2012
There are three boot screens (also called splashes or splash screens) as of 13 Nov. 2007. The U-Boot splash is displayed until the kernel takes over. Presumably the kernel will eventually display a splash while it boots. When userspace initializes, psplash displays a splash. Finally X displays a splash when it starts.
Contents |
[edit] U-Boot Splash
Werner's README states the following:
- "The splash image is a raw dump of the 480x640x16 frame buffer, with RGB
- 5:6:5 organization and HWSWP = 1. To save a lot of space and to greatly
- improve speed, we gzip the raw dump."
So what you have to do to create your U-boot splashscreen is
- create your splash-file with the dimensions 480x640 (in 16bit preferrably) and save it in png format
- get the necessary tools for converting it
- get the conversion script
- download the Perl script kindly provided by Werner Almesberger
- make it executable with `chmod u+x splashimage.pl`
- Optionally: have a look at the README file. It should contain the most up-to-date info from Werner himself.
- Make sure to have netpbm installed.
- Check your ${PATH} for pngtopnm and pbmtorgb3 executables.
- If those programs are missing, check whether rle-support is enabled for netpbm.
- If you don't have Dfu-util already, get it here.
- get the conversion script
- convert the png-file
- execute `./splashimg.pl yourfancynewsplashscreen.png | gzip -9 > bootscreen.splash`
- Make sure you redirect the output! The perl-script shoves the splash-data to stdout.
- -pnm makes the pngtopnm-executable dispensable and eats a generic pnm-/pbm-file - gimp can export to them, for example.
- If you omit the png-file, splashimg.pl will be looking for a file named System_boot.png
- -32 will create a 480x640x32 frame buffer
- ( I have no idea if that's supported (???) )
- -swap causes some XOR operation performed in the end of the image creation.
- ( Some kind of inverting? Option for different edianness? )
- execute `./splashimg.pl yourfancynewsplashscreen.png | gzip -9 > bootscreen.splash`
- upload your new bootscreen.splash ( you need alt-name: splash )
- if you don't know how to do that: check the instructions found here
- IMPORTANT! check the exact size of your splash-file (e.g. ls -l or du -b)
- Explanation: The flash-partition reserved for the splash image (dubbed splash) is 655360 Bytes (0xa0000) in size; per default u-boot only reads 20480 (0x5000) of those, though.
- Essentially, this leaves you with 3 choices:
- Make a splash image that's gzip'd smaller than 20480 Bytes. This is somewhat boring, as it imposes limits to your creativity.
- Turn off the read-limit, so u-boot scans the whole splash-partition before commencing boot. This would mean a little longer time till the image is actually displayed. And I mean: little.
- Or tailor the read size to the size of your splash.
- If it's smaller than the pre-defined 0x5000 Bytes, u-boot is done with reading sooner.
- If it's bigger than the 0x5000 Bytes, you will have to adapt it or your image won't be displayed correctly.
- So, if you do (need) to edit the size:
- Start your u-boot. And make sure you're in NAND (as opposed to NOR).
- (You do that by pressing PWR briefly before pressing AUX - keep them both pressed until the u-boot appears.)
- Now select USB-Console, plugin your USB-cable and start the tty-console of your choice
- e.g. `screen /dev/ttyACM0`
- for the GTA01:
- setenv splashimage nand read.e 0x32000000 splash 0x5000\; unzip 0x32000000 0x33d00000 0x96000
- saveenv
- for the GTA02:
- setenv splashimage nand read.e 0x32000000 splash 0x5000\; unzip 0x32000000 0x8800000 0x96000
- saveenv
- In those commands, replace the 0x5000 with the size of your choice - or omit it altogether. The minimum size you have to put is the size of your splash-file - or you will receive garbage.
- Also consider that this is a basic terminal; input is not exactly like on the shells you're used to.
[edit] See also
This ticket has recent explanations: 1735.
[edit] Linux kernel
To Do
[edit] psplash
You need to recompile psplash, because the picture is hardcoded. There is a script in the source for psplash for making a new header file. On Ubuntu, you need the libgtk2.0-dev package to run the script.
make-image-header.sh my_image.png HAND mv my_image-img.h psplash-hand-img.h
Then add your custom header to the OpenEmbedded recipe (org.openembedded.dev/packages/psplash/files/openmoko/psplash-hand-img.h), or rebuild psplash by hand.
[edit] X splash
The X server accepts a -root-ppm option, which takes a plain old (raw) ppm file. Replace /usr/share/pixmaps/xsplash-vga.ppm on the phone or org.openembedded.dev/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/xsplash-vga.ppm in OpenEmbedded.
With more gory details, /etc/X11/Xserver ends with the lines:
# start off server in conventional location. ARGS="$ARGS -dpi 285 -screen 480x640 -hide-cursor -root-ppm /usr/share/pixmaps/jsplash-vga.ppm vt1" #ARGS="$ARGS -dpi 285 -screen 480x640 -hide-cursor vt1" DISPLAY=':0' exec xinit /etc/X11/Xsession -- $XSERVER $DISPLAY $ARGS $* >/tmp/x.log 2>&1
The '-root-ppm' is the static splash screen.
Following that, Xsession starts enlightenment, passing it $E_PROFILE as defined in /etc/enlightenment/default_profile.
[edit] E splash
/usr/share/enlightenment/data/init contains one or more .edj files that each define an animated splash init that appears next, and until enlightenment finishes loading. The .edj file used is determined by $E_PROFILE. So if default_profile contains E_PROFILE='-profile illume' then enlightenment will try to start up with illume_init.edj for the splash (the 'cylon' animated blip, or various other animations depending on image) and will try to use /usr/share/enlightenment/data/themes/illume.edj as the theme for illume. If it's E_PROFILE='-profile fso' then it looks for fso_init.edj splash and fso.edj theme, etc.