Skip to contentSkip to conversation

Grub2 and Splash

Buildroot Steve Kenton 1 participant 1 message Feb 18, 2015 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

Forgot to copy the list

-------- Forwarded Message --------
Subject: Re: [Buildroot] Grub2 and Splash
Date: Wed, 18 Feb 2015 11:44:03 -0600
From: Steve Kenton <[email protected]>
To: Thomas Petazzoni <[email protected]>

Quoted 10 lines · Thomas Petazzoni

Dear Steve Kenton,

Quoted 3 lines · Steve Kenton

Looking into adding a splash screen to my grub2 menu.
Cobbled together the one below using font from my build host and it works. Trying to build unicode.pf2 with buildroot immediately ran into snag with freetype.

Could you please be more specific than "ran into snag" ? Which error messages and issues, when trying what exactly ?

Changed ~/buildroot-2015.02-rc2/boot/grub2/grub2.mk to enable grub-mkfont and added dependency on freetype after first failure for missing freetype include

GRUB2_CONF_OPTS = \
	--target=$(GRUB2_TARGET) \
	--with-platform=$(GRUB2_PLATFORM) \
	--enable-grub-mkfont \
	--enable-efiemu=no \
	--enable-liblzma=no \
	--enable-device-mapper=no \
	--enable-libzfs=no \
	--disable-werror

GRUB2_DEPENDENCIES += freetype

Re-ran make grub2-reconfigure
...
./config.status --file=00_header:util/grub.d/00_header.in util/grub-mkfont.c:42:30: fatal error: freetype/ftsynth.h: No such file or directory

 #include <freetype/ftsynth.h>
                              ^

compilation terminated.

Quoted 8 lines
Quoted 4 lines

Finally RTFM and realized how special the grub2 build is.
Is there a reason that grub2 is not just built as a regular host package?

Because grub2 is kind of special: it needs to build both some things for the target, and some things for the host. And there are some explanations about it in grub2.mk:

Yes, looked at that and ./configure --help for grub2, saw that it clearly defined System types:

  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
  --target=TARGET   configure for building compilers for TARGET [HOST]
Quoted 7 lines

===

# Grub2 is kind of special: it considers CC, LD and so on to be the

# tools to build the native tools (i.e to be executed on the build
# machine), and uses TARGET_CC, TARGET_CFLAGS, TARGET_CPPFLAGS to
# build the bootloader itself.

Understand, two tool chains required. Still trying to understand their use in buildroot scripts

Quoted 8 lines
GRUB2_CONF_ENV = \
        $(HOST_CONFIGURE_OPTS) \
        CPP="$(HOSTCC) -E" \
        TARGET_CC="$(TARGET_CC)" \
        TARGET_CFLAGS="$(TARGET_CFLAGS)" \
        TARGET_CPPFLAGS="$(TARGET_CPPFLAGS)"
Quoted 6 lines

===

And it is actually more logical for grub2 to be a target package: the main purpose of grub2 is to have a bootloader on the target, much like U-Boot or Barebox. The fact that in addition Grub2 provides a bunch of host utilities is kind of a "detail".

Hmm, not sure I agree about the "detail". As currently built some of the grub scripts such as grub-mkconfig would try to run other scripts residing in the build hosts /usr directory not the version in buildroot $HOST_DIR or $TARGET_DIR I am of the opinion that if we build it it should work :-) Currently the instructions to install grub2 are more complicated then "install-grub ..."

Steve