Patchwork [v2,4/7] syslinux.bbclass, syslinux: Update to syslinux 6.01

login
register
mail settings
Submitter Jason Wessel
Date Sept. 14, 2013, 12:09 a.m.
Message ID <1379117343-29877-5-git-send-email-jason.wessel@windriver.com>
Download mbox | patch
Permalink /patch/58017/
State New
Headers show

Comments

Jason Wessel - Sept. 14, 2013, 12:09 a.m.
A newer version of syslinux is required for an EFI enabled isohybrid.
This is used for the the capability to generate 3 types of ISO images,
all of which can be booted off a USB device or HDD if copied with dd.

1) PC BIOS only ISO
2) EFI only ISO
3) EFI + PC BIOS ISO

The syslinux.bbclass required a minor tweak because ldlinux.c32 is
dynamically loaded and needs to be in the created media as of syslinux
5 and up.

[YOCTO #4100]

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 meta/classes/syslinux.bbclass                      |    1 +
 .../{syslinux_4.07.bb => syslinux_6.01.bb}         |   26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
 rename meta/recipes-devtools/syslinux/{syslinux_4.07.bb => syslinux_6.01.bb} (63%)
Martin Jansa - Sept. 14, 2013, 8:05 a.m.
On Fri, Sep 13, 2013 at 07:09:00PM -0500, Jason Wessel wrote:
> A newer version of syslinux is required for an EFI enabled isohybrid.
> This is used for the the capability to generate 3 types of ISO images,
> all of which can be booted off a USB device or HDD if copied with dd.
> 
> 1) PC BIOS only ISO
> 2) EFI only ISO
> 3) EFI + PC BIOS ISO
> 
> The syslinux.bbclass required a minor tweak because ldlinux.c32 is
> dynamically loaded and needs to be in the created media as of syslinux
> 5 and up.

Hi Jason,

can you please look at
https://bugzilla.yoctoproject.org/show_bug.cgi?id=3944
?

> 
> [YOCTO #4100]
> 
> Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
> ---
>  meta/classes/syslinux.bbclass                      |    1 +
>  .../{syslinux_4.07.bb => syslinux_6.01.bb}         |   26 ++++++++++++--------
>  2 files changed, 17 insertions(+), 10 deletions(-)
>  rename meta/recipes-devtools/syslinux/{syslinux_4.07.bb => syslinux_6.01.bb} (63%)
>
Jason Wessel - Sept. 14, 2013, 12:19 p.m.
On 09/14/2013 03:05 AM, Martin Jansa wrote:
> On Fri, Sep 13, 2013 at 07:09:00PM -0500, Jason Wessel wrote:
>> A newer version of syslinux is required for an EFI enabled isohybrid.
>> This is used for the the capability to generate 3 types of ISO images,
>> all of which can be booted off a USB device or HDD if copied with dd.
>>
>> 1) PC BIOS only ISO
>> 2) EFI only ISO
>> 3) EFI + PC BIOS ISO
>>
>> The syslinux.bbclass required a minor tweak because ldlinux.c32 is
>> dynamically loaded and needs to be in the created media as of syslinux
>> 5 and up.
>
> Hi Jason,
>
> can you please look at
> https://bugzilla.yoctoproject.org/show_bug.cgi?id=3944
> ?


I can look at fixing the defect, but there is no description of how to use the directdisk to see the problem.  Could you provide an example?

I added the directdisk to IMAGE_FSTYPES, but didn't get a .directdisk in the deploy directory so that is not how it works.   Also I think the right solution is to simply call syslinux_hddimg_populate() from the directdisk class vs having copied code for the install of the syslinux specific files (that is how 1/2 the problem occurred in the first place).

Back to this particular patch, the ldlinux.c32 change does not affect the bootdirect class.  The ldlinux.c32 is only required for isolinux and the copy is contained with in the inherited syslinux class.

Cheers,
Jason.
Martin Jansa - Sept. 14, 2013, 1:16 p.m.
On Sat, Sep 14, 2013 at 07:19:43AM -0500, Jason Wessel wrote:
> On 09/14/2013 03:05 AM, Martin Jansa wrote:
> > On Fri, Sep 13, 2013 at 07:09:00PM -0500, Jason Wessel wrote:
> >> A newer version of syslinux is required for an EFI enabled isohybrid.
> >> This is used for the the capability to generate 3 types of ISO images,
> >> all of which can be booted off a USB device or HDD if copied with dd.
> >>
> >> 1) PC BIOS only ISO
> >> 2) EFI only ISO
> >> 3) EFI + PC BIOS ISO
> >>
> >> The syslinux.bbclass required a minor tweak because ldlinux.c32 is
> >> dynamically loaded and needs to be in the created media as of syslinux
> >> 5 and up.
> >
> > Hi Jason,
> >
> > can you please look at
> > https://bugzilla.yoctoproject.org/show_bug.cgi?id=3944
> > ?
> 
> 
> I can look at fixing the defect, but there is no description of how to use the directdisk to see the problem.  Could you provide an example?
> 
> I added the directdisk to IMAGE_FSTYPES, but didn't get a .directdisk in the deploy directory so that is not how it works.   Also I think the right solution is to simply call syslinux_hddimg_populate() from the directdisk class vs having copied code for the install of the syslinux specific files (that is how 1/2 the problem occurred in the first place).
> 
> Back to this particular patch, the ldlinux.c32 change does not affect the bootdirect class.  The ldlinux.c32 is only required for isolinux and the copy is contained with in the inherited syslinux class.

You can reproduce it by adding vmdk to IMAGE_FSTYPES and building e.g.
qemux86 and trying to boot it in VirtualBox.

It will always enable tty0 and only way to disable it now is to enable
menu, but that doesn't work with vmdk images because of missing
vesamenu.c32
Darren Hart - Sept. 16, 2013, 6:10 p.m.
On Sat, 2013-09-14 at 15:16 +0200, Martin Jansa wrote:
> On Sat, Sep 14, 2013 at 07:19:43AM -0500, Jason Wessel wrote:
> > On 09/14/2013 03:05 AM, Martin Jansa wrote:
> > > On Fri, Sep 13, 2013 at 07:09:00PM -0500, Jason Wessel wrote:
> > >> A newer version of syslinux is required for an EFI enabled isohybrid.
> > >> This is used for the the capability to generate 3 types of ISO images,
> > >> all of which can be booted off a USB device or HDD if copied with dd.
> > >>
> > >> 1) PC BIOS only ISO
> > >> 2) EFI only ISO
> > >> 3) EFI + PC BIOS ISO
> > >>
> > >> The syslinux.bbclass required a minor tweak because ldlinux.c32 is
> > >> dynamically loaded and needs to be in the created media as of syslinux
> > >> 5 and up.
> > >
> > > Hi Jason,
> > >
> > > can you please look at
> > > https://bugzilla.yoctoproject.org/show_bug.cgi?id=3944
> > > ?
> > 
> > 
> > I can look at fixing the defect, but there is no description of how to use the directdisk to see the problem.  Could you provide an example?
> > 
> > I added the directdisk to IMAGE_FSTYPES, but didn't get a .directdisk in the deploy directory so that is not how it works.   Also I think the right solution is to simply call syslinux_hddimg_populate() from the directdisk class vs having copied code for the install of the syslinux specific files (that is how 1/2 the problem occurred in the first place).
> > 
> > Back to this particular patch, the ldlinux.c32 change does not affect the bootdirect class.  The ldlinux.c32 is only required for isolinux and the copy is contained with in the inherited syslinux class.
> 
> You can reproduce it by adding vmdk to IMAGE_FSTYPES and building e.g.
> qemux86 and trying to boot it in VirtualBox.
> 
> It will always enable tty0 and only way to disable it now is to enable
> menu, but that doesn't work with vmdk images because of missing
> vesamenu.c32
> 

Thanks for catching that Martin.

I agree that the SYSLINUX_SERIAL needs to be respected regardless of if
menu is set.

It should be acceptable to install vesamenu.c32 I would think, although
it sounds as though there is some work to perform to make sure
bootdirect uses all the new infrastructure as well.
Martin Jansa - Sept. 16, 2013, 7:31 p.m.
On Mon, Sep 16, 2013 at 11:10:17AM -0700, Darren Hart wrote:
> On Sat, 2013-09-14 at 15:16 +0200, Martin Jansa wrote:
> > On Sat, Sep 14, 2013 at 07:19:43AM -0500, Jason Wessel wrote:
> > > On 09/14/2013 03:05 AM, Martin Jansa wrote:
> > > > On Fri, Sep 13, 2013 at 07:09:00PM -0500, Jason Wessel wrote:
> > > >> A newer version of syslinux is required for an EFI enabled isohybrid.
> > > >> This is used for the the capability to generate 3 types of ISO images,
> > > >> all of which can be booted off a USB device or HDD if copied with dd.
> > > >>
> > > >> 1) PC BIOS only ISO
> > > >> 2) EFI only ISO
> > > >> 3) EFI + PC BIOS ISO
> > > >>
> > > >> The syslinux.bbclass required a minor tweak because ldlinux.c32 is
> > > >> dynamically loaded and needs to be in the created media as of syslinux
> > > >> 5 and up.
> > > >
> > > > Hi Jason,
> > > >
> > > > can you please look at
> > > > https://bugzilla.yoctoproject.org/show_bug.cgi?id=3944
> > > > ?
> > > 
> > > 
> > > I can look at fixing the defect, but there is no description of how to use the directdisk to see the problem.  Could you provide an example?
> > > 
> > > I added the directdisk to IMAGE_FSTYPES, but didn't get a .directdisk in the deploy directory so that is not how it works.   Also I think the right solution is to simply call syslinux_hddimg_populate() from the directdisk class vs having copied code for the install of the syslinux specific files (that is how 1/2 the problem occurred in the first place).
> > > 
> > > Back to this particular patch, the ldlinux.c32 change does not affect the bootdirect class.  The ldlinux.c32 is only required for isolinux and the copy is contained with in the inherited syslinux class.
> > 
> > You can reproduce it by adding vmdk to IMAGE_FSTYPES and building e.g.
> > qemux86 and trying to boot it in VirtualBox.
> > 
> > It will always enable tty0 and only way to disable it now is to enable
> > menu, but that doesn't work with vmdk images because of missing
> > vesamenu.c32
> > 
> 
> Thanks for catching that Martin.
> 
> I agree that the SYSLINUX_SERIAL needs to be respected regardless of if
> menu is set.

Yes, that would preserve existing behavior, not everybody wants to
have menu.

> It should be acceptable to install vesamenu.c32 I would think, although
> it sounds as though there is some work to perform to make sure
> bootdirect uses all the new infrastructure as well.

Yes it would be nice to have the possibility to enable menu, it can even
be enabled by default once it's working properly and there is an option
to disable it.

Patch

diff --git a/meta/classes/syslinux.bbclass b/meta/classes/syslinux.bbclass
index 501bc6d..da7f716 100644
--- a/meta/classes/syslinux.bbclass
+++ b/meta/classes/syslinux.bbclass
@@ -41,6 +41,7 @@  syslinux_populate() {
 syslinux_iso_populate() {
 	syslinux_populate ${ISODIR} ${ISOLINUXDIR} isolinux.cfg
 	install -m 0644 ${STAGING_DATADIR}/syslinux/isolinux.bin ${ISODIR}${ISOLINUXDIR}
+	install -m 0644 ${STAGING_DATADIR}/syslinux/ldlinux.c32 ${ISODIR}${ISOLINUXDIR}
 	if [ "${AUTO_SYSLINUXMENU}" = 1 ] ; then
 		install -m 0644 ${STAGING_DATADIR}/syslinux/vesamenu.c32 ${ISODIR}${ISOLINUXDIR}/vesamenu.c32
 		if [ "${SYSLINUX_SPLASH}" != "" ] ; then
diff --git a/meta/recipes-devtools/syslinux/syslinux_4.07.bb b/meta/recipes-devtools/syslinux/syslinux_6.01.bb
similarity index 63%
rename from meta/recipes-devtools/syslinux/syslinux_4.07.bb
rename to meta/recipes-devtools/syslinux/syslinux_6.01.bb
index bba5dda..4438ea8 100644
--- a/meta/recipes-devtools/syslinux/syslinux_4.07.bb
+++ b/meta/recipes-devtools/syslinux/syslinux_6.01.bb
@@ -2,19 +2,21 @@  DESCRIPTION = "A multi-purpose linux bootloader"
 HOMEPAGE = "http://syslinux.zytor.com/"
 LICENSE = "GPLv2+"
 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
-                    file://README;beginline=35;endline=41;md5=f7249a750bc692d1048b2626752aa415"
+                    file://README;beginline=35;endline=41;md5=558f2c71cb1fb9ba511ccd4858e48e8a"
 
 # If you really want to run syslinux, you need mtools.  We just want the
 # ldlinux.* stuff for now, so skip mtools-native
 DEPENDS = "nasm-native util-linux"
-PR = "r0"
 
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/boot/syslinux/4.xx/syslinux-${PV}.tar.bz2"
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/boot/syslinux/6.xx/syslinux-${PV}.tar.bz2"
 
-SRC_URI[md5sum] = "9ff6e1b94efab931fb4717b600d88779"
-SRC_URI[sha256sum] = "1240a4e4219b518bdaef78931b6e901befeff35e6894ac6db785115848a7a05a"
+SRC_URI[md5sum] = "6945ee89e29119d459baed4937bbc534"
+SRC_URI[sha256sum] = "83a04cf81e6a46b80ee5a321926eea095af3498b04317e3674b46c125c7a5b43"
 
 COMPATIBLE_HOST = '(x86_64|i.86).*-(linux|freebsd.*)'
+# Don't let the sanity checker trip on the 32 bit real mode BIOS binaries
+INSANE_SKIP_${PN}-misc = "arch"
+INSANE_SKIP_${PN}-chain = "arch"
 
 EXTRA_OEMAKE = " \
 	BINDIR=${bindir} SBINDIR=${sbindir} LIBDIR=${libdir} \
@@ -28,21 +30,25 @@  do_configure() {
 	sed -e 's,win32/\S*,,g' -i Makefile
 
 	# clean installer executables included in source tarball
-	oe_runmake clean
+	oe_runmake clean firmware="efi32" EFIINC="${includedir}"
+	# NOTE: There is a temporary work around above to specify
+	#	the efi32 as the firmware else the pre-built bios
+	#	files get erased contrary to the doc/distib.txt
+	#	In the future this should be "bios" and not "efi32".
 }
 
 do_compile() {
 	# Rebuild only the installer; keep precompiled bootloaders
 	# as per author's request (doc/distrib.txt)
-	oe_runmake CC="${CC} ${CFLAGS}" LDFLAGS="${LDFLAGS}" installer
+	oe_runmake CC="${CC} ${CFLAGS}" LDFLAGS="${LDFLAGS}" firmware="bios" installer
 }
 
 do_install() {
-	oe_runmake install INSTALLROOT="${D}"
+	oe_runmake install INSTALLROOT="${D}" firmware="bios"
 
 	install -d ${D}${datadir}/syslinux/
-	install -m 644 ${S}/core/ldlinux.sys ${D}${datadir}/syslinux/
-	install -m 644 ${S}/core/ldlinux.bss ${D}${datadir}/syslinux/
+	install -m 644 ${S}/bios/core/ldlinux.sys ${D}${datadir}/syslinux/
+	install -m 644 ${S}/bios/core/ldlinux.bss ${D}${datadir}/syslinux/
 }
 
 PACKAGES += "${PN}-extlinux ${PN}-mbr ${PN}-chain ${PN}-pxelinux ${PN}-isolinux ${PN}-misc"