From: Henning Schild <henning.schild@siemens.com>
To: Andreas Reichel <andreas.reichel.ext@siemens.com>
Cc: <isar-users@googlegroups.com>,
Cedric Hombourger <Cedric_Hombourger@mentor.com>
Subject: Re: [PATCH v2 12/17] wic: Add pcibios boot plugins and wks files
Date: Mon, 16 Apr 2018 13:48:00 +0200 [thread overview]
Message-ID: <20180416134800.13072d29@mmd1pvb1c.ad001.siemens.net> (raw)
In-Reply-To: <20180416105229.GG8866@iiotirae>
Am Mon, 16 Apr 2018 12:52:29 +0200
schrieb Andreas Reichel <andreas.reichel.ext@siemens.com>:
> On Fri, Apr 13, 2018 at 04:19:01PM +0200, Henning Schild wrote:
> > Create a modified version of directdisk.wks that enabled legacy boot
> > images in Isar. "bootimg-pcbios-isar" expects the buildchroot to
> > contain the packages "syslinux syslinux-common" and will create a
> > disk using this bootloader.
> >
> > Signed-off-by: Henning Schild <henning.schild@siemens.com>
> > ---
> > .../scripts/lib/wic/canned-wks/common-isar.wks.inc | 3 +
> > .../scripts/lib/wic/canned-wks/directdisk-isar.wks | 7 +
> > .../lib/wic/plugins/source/bootimg-pcbios-isar.py | 217
> > +++++++++++++++++++++ 3 files changed, 227 insertions(+)
> > create mode 100644
> > meta-isar/scripts/lib/wic/canned-wks/common-isar.wks.inc create
> > mode 100644
> > meta-isar/scripts/lib/wic/canned-wks/directdisk-isar.wks create
> > mode 100644
> > meta-isar/scripts/lib/wic/plugins/source/bootimg-pcbios-isar.py
> >
> > diff --git
> > a/meta-isar/scripts/lib/wic/canned-wks/common-isar.wks.inc
> > b/meta-isar/scripts/lib/wic/canned-wks/common-isar.wks.inc new file
> > mode 100644 index 0000000..c8ea4c2 --- /dev/null
> > +++ b/meta-isar/scripts/lib/wic/canned-wks/common-isar.wks.inc
> > @@ -0,0 +1,3 @@
> > +# This file is included into 3 canned wks files from this directory
> > +part /boot --source bootimg-pcbios-isar --ondisk sda --label boot
> > --active --align 1024 +part / --source rootfs --ondisk sda
> > --fstype=ext4 --label platform --align 1024 diff --git
> > a/meta-isar/scripts/lib/wic/canned-wks/directdisk-isar.wks
> > b/meta-isar/scripts/lib/wic/canned-wks/directdisk-isar.wks new file
> > mode 100644 index 0000000..2b9576d --- /dev/null
> > +++ b/meta-isar/scripts/lib/wic/canned-wks/directdisk-isar.wks
> > @@ -0,0 +1,7 @@
> > +# short-description: Create a 'pcbios' direct disk image
> > +# long-description: Creates a partitioned legacy BIOS disk image
> > that the user +# can directly dd to boot media.
> > +
> > +include common-isar.wks.inc
> > +
> > +bootloader --timeout=0 --append="rootwait rootfstype=ext4
> > video=vesafb vga=0x318 console=tty0 console=ttyS0,115200n8" diff
> > --git
> > a/meta-isar/scripts/lib/wic/plugins/source/bootimg-pcbios-isar.py
> > b/meta-isar/scripts/lib/wic/plugins/source/bootimg-pcbios-isar.py
> > new file mode 100644 index 0000000..0423862 --- /dev/null +++
> > b/meta-isar/scripts/lib/wic/plugins/source/bootimg-pcbios-isar.py
> > @@ -0,0 +1,217 @@ +# ex:ts=4:sw=4:sts=4:et
> > +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
> > +#
> > +# Copyright (c) 2014, Intel Corporation.
> > +# All rights reserved.
> > +#
> > +# This program is free software; you can redistribute it and/or
> > modify +# it under the terms of the GNU General Public License
> > version 2 as +# published by the Free Software Foundation.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > +# GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public
> > License along +# with this program; if not, write to the Free
> > Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor,
> > Boston, MA 02110-1301 USA. +#
> > +# DESCRIPTION
> > +# This implements the 'bootimg-pcbios-isar' source plugin class
> > for 'wic' +#
> > +# AUTHORS
> > +# Tom Zanussi <tom.zanussi (at] linux.intel.com>
> > +#
> > +
> > +import logging
> > +import os
> > +
> > +from wic import WicError
> > +from wic.engine import get_custom_config
> > +from wic.utils import runner
> > +from wic.pluginbase import SourcePlugin
> > +from wic.utils.misc import (exec_cmd, exec_native_cmd,
> > + get_bitbake_var, BOOTDD_EXTRA_SPACE)
> > +
> > +logger = logging.getLogger('wic')
> > +
> > +class BootimgPcbiosIsarPlugin(SourcePlugin):
> > + """
> > + Create MBR boot partition and install syslinux on it.
> > + """
> > +
> > + name = 'bootimg-pcbios-isar'
> > +
> > + @classmethod
> > + def _get_syslinux_dir(cls, bootimg_dir):
> > + """
> > + Get path to syslinux from either default bootimg_dir
> > + or wic-tools STAGING_DIR.
> > + """
> > + for path in (bootimg_dir,
> > get_bitbake_var("STAGING_DATADIR", "wic-tools")):
> > + if not path:
> > + continue
> > + syslinux_dir = os.path.join(path, 'syslinux')
> > + if os.path.exists(syslinux_dir):
> > + return syslinux_dir
> > +
> > + raise WicError("Couldn't find syslinux directory, exiting")
> > +
> > + @classmethod
> > + def do_install_disk(cls, disk, disk_name, creator, workdir,
> > oe_builddir,
> > + bootimg_dir, kernel_dir, native_sysroot):
> > + """
> > + Called after all partitions have been prepared and
> > assembled into a
> > + disk image. In this case, we install the MBR.
> > + """
> > + syslinux_dir = cls._get_syslinux_dir(bootimg_dir)
> > + if creator.ptable_format == 'msdos':
> > + mbrfile = os.path.join(syslinux_dir, "mbr/mbr.bin")
> > + elif creator.ptable_format == 'gpt':
> > + mbrfile = os.path.join(syslinux_dir,
> > "mbr/gptmbr.bin")
> I know that a GPT contains an MBR for compatibility reasons. But this
> is usually just to stop the system from booting of the harddisk
> partitioned by GPT if it is used in an older PC accidentally. Why
> would one want to install syslinux with MBR support into the
> protected MBR of a GPT that should not be used for booting? Or do I
> get that wrong?
This is exactly how wic does it. Maybe when i send that as fork and
later modify we can just review the isar-changes.
Henning
> > + else:
> > + raise WicError("Unsupported partition table: %s" %
> > + creator.ptable_format)
> > +
> > + if not os.path.exists(mbrfile):
> > + raise WicError("Couldn't find %s. If using the -e
> > option, do you "
> > + "have the right MACHINE set in
> > local.conf? If not, "
> > + "is the bootimg_dir path correct?" %
> > mbrfile) +
> > + full_path = creator._full_path(workdir, disk_name,
> > "direct")
> > + logger.debug("Installing MBR on disk %s as %s with size %s
> > bytes",
> > + disk_name, full_path, disk.min_size)
> > +
> > + rcode = runner.show(['dd', 'if=%s' % mbrfile,
> > + 'of=%s' % full_path, 'conv=notrunc'])
> > + if rcode != 0:
> > + raise WicError("Unable to set MBR to %s" % full_path)
> > +
> > + @classmethod
> > + def do_configure_partition(cls, part, source_params, creator,
> > cr_workdir,
> > + oe_builddir, bootimg_dir,
> > kernel_dir,
> > + native_sysroot):
> > + """
> > + Called before do_prepare_partition(), creates syslinux
> > config
> > + """
> > + hdddir = "%s/hdd/boot" % cr_workdir
> > +
> > + install_cmd = "install -d %s" % hdddir
> > + exec_cmd(install_cmd)
> > +
> > + bootloader = creator.ks.bootloader
> > +
> > + custom_cfg = None
> > + if bootloader.configfile:
> > + custom_cfg = get_custom_config(bootloader.configfile)
> > + if custom_cfg:
> > + # Use a custom configuration for grub
> > + syslinux_conf = custom_cfg
> > + logger.debug("Using custom configuration file %s "
> > + "for syslinux.cfg",
> > bootloader.configfile)
> > + else:
> > + raise WicError("configfile is specified but failed
> > to "
> > + "get it from %s." %
> > bootloader.configfile) +
> > + if not custom_cfg:
> > + # Create syslinux configuration using parameters from
> > wks file
> > + splash = os.path.join(cr_workdir,
> > "/hdd/boot/splash.jpg")
> > + if os.path.exists(splash):
> > + splashline = "menu background splash.jpg"
> > + else:
> > + splashline = ""
> > +
> > + syslinux_conf = ""
> > + syslinux_conf += "PROMPT 0\n"
> > + syslinux_conf += "TIMEOUT " + str(bootloader.timeout)
> > + "\n"
> > + syslinux_conf += "\n"
> > + syslinux_conf += "ALLOWOPTIONS 1\n"
> > + syslinux_conf += "SERIAL 0 115200\n"
> > + syslinux_conf += "\n"
> > + if splashline:
> > + syslinux_conf += "%s\n" % splashline
> > + syslinux_conf += "DEFAULT boot\n"
> > + syslinux_conf += "LABEL boot\n"
> > +
> > + kernel = get_bitbake_var("KERNEL_IMAGE")
> > + initrd = get_bitbake_var("INITRD_IMAGE")
> > + syslinux_conf += "KERNEL " + kernel + "\n"
> > +
> > + syslinux_conf += "APPEND label=boot root=%s initrd=%s
> > %s\n" % \
> > + (creator.rootdev, initrd,
> > bootloader.append) +
> > + logger.debug("Writing syslinux config
> > %s/hdd/boot/syslinux.cfg",
> > + cr_workdir)
> > + cfg = open("%s/hdd/boot/syslinux.cfg" % cr_workdir, "w")
> > + cfg.write(syslinux_conf)
> > + cfg.close()
> > +
> > + @classmethod
> > + def do_prepare_partition(cls, part, source_params, creator,
> > cr_workdir,
> > + oe_builddir, bootimg_dir, kernel_dir,
> > + rootfs_dir, native_sysroot):
> > + """
> > + Called to do the actual content population for a partition
> > i.e. it
> > + 'prepares' the partition to be incorporated into the image.
> > + In this case, prepare content for legacy bios boot
> > partition.
> > + """
> > + syslinux_dir = cls._get_syslinux_dir(bootimg_dir)
> > +
> > + staging_kernel_dir = kernel_dir
> > + kernel = get_bitbake_var("KERNEL_IMAGE")
> > + initrd = get_bitbake_var("INITRD_IMAGE")
> > +
> > + hdddir = "%s/hdd/boot" % cr_workdir
> > +
> > + cmds = ("install -m 0644 %s/%s %s/%s" %
> > + (staging_kernel_dir, kernel, hdddir, kernel),
> > + "install -m 0644 %s/%s %s/%s" %
> > + (staging_kernel_dir, initrd, hdddir, initrd),
> > + "install -m 444 %s/modules/bios/ldlinux.c32
> > %s/ldlinux.c32" %
> > + (syslinux_dir, hdddir),
> > + "install -m 0644 %s/modules/bios/vesamenu.c32
> > %s/vesamenu.c32" %
> > + (syslinux_dir, hdddir),
> > + "install -m 444 %s/modules/bios/libcom32.c32
> > %s/libcom32.c32" %
> > + (syslinux_dir, hdddir),
> > + "install -m 444 %s/modules/bios/libutil.c32
> > %s/libutil.c32" %
> > + (syslinux_dir, hdddir))
> > +
> > + for install_cmd in cmds:
> > + exec_cmd(install_cmd)
> > +
> > + du_cmd = "du -bks %s" % hdddir
> > + out = exec_cmd(du_cmd)
> > + blocks = int(out.split()[0])
> > +
> > + extra_blocks = part.get_extra_block_count(blocks)
> > +
> > + if extra_blocks < BOOTDD_EXTRA_SPACE:
> > + extra_blocks = BOOTDD_EXTRA_SPACE
> > +
> > + blocks += extra_blocks
> > +
> > + logger.debug("Added %d extra blocks to %s to get to %d
> > total blocks",
> > + extra_blocks, part.mountpoint, blocks)
> > +
> > + # dosfs image, created by mkdosfs
> > + bootimg = "%s/boot.img" % cr_workdir
> > +
> > + dosfs_cmd = "mkdosfs -n boot -S 512 -C %s %d" % (bootimg,
> > blocks)
> > + exec_native_cmd(dosfs_cmd, native_sysroot)
> > +
> > + mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
> > + exec_cmd(mcopy_cmd, native_sysroot)
> > +
> > + syslinux_cmd = "syslinux %s" % bootimg
> > + exec_native_cmd(syslinux_cmd, native_sysroot)
> > +
> > + chmod_cmd = "chmod 644 %s" % bootimg
> > + exec_cmd(chmod_cmd)
> > +
> > + du_cmd = "du -Lbks %s" % bootimg
> > + out = exec_cmd(du_cmd)
> > + bootimg_size = out.split()[0]
> > +
> > + part.size = int(bootimg_size)
> > + part.source_file = bootimg
> > --
> > 2.16.1
> >
>
next prev parent reply other threads:[~2018-04-16 11:48 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-13 14:18 [PATCH v2 00/16] wic integration Henning Schild
2018-04-13 14:18 ` [PATCH v2 01/17] Revert "wic: Make the bootimg-efi plugin generate usable images" Henning Schild
2018-04-13 14:18 ` [PATCH v2 02/17] Revert "wic: Introduce the `WicExecError` exception class" Henning Schild
2018-04-13 14:18 ` [PATCH v2 03/17] Revert "wic: Work around mcopy error" Henning Schild
2018-04-13 14:18 ` [PATCH v2 04/17] Revert "wic: Use sudo instead of pseudo" Henning Schild
2018-04-16 10:44 ` Andreas Reichel
2018-04-16 10:53 ` Andreas Reichel
2018-04-16 10:57 ` Henning Schild
2018-04-13 14:18 ` [PATCH v2 05/17] Revert "wic: Remove sysroot support" Henning Schild
2018-04-13 14:18 ` [PATCH v2 06/17] wic: now truly go for the wic version we claim to have Henning Schild
2018-04-13 14:18 ` [PATCH v2 07/17] Revert "isar-init-build-env: Add /sbin to PATH" Henning Schild
2018-04-13 14:18 ` [PATCH v2 08/17] classes: image: introduce size measuring function, for before do_*_image Henning Schild
2018-04-13 14:18 ` [PATCH v2 09/17] meta/image: Fix broken variables KERNEL_IMAGE and INITRD_IMAGE Henning Schild
2018-04-16 10:45 ` Andreas Reichel
2018-04-13 14:18 ` [PATCH v2 10/17] isar-init-build-env: make ISARROOT available in bitbake Henning Schild
2018-04-13 14:19 ` [PATCH v2 11/17] images: New class wic-img for wic intregration Henning Schild
2018-04-13 14:44 ` Henning Schild
2018-04-16 10:17 ` Claudius Heine
2018-04-16 10:25 ` Henning Schild
2018-04-16 10:31 ` Andreas Reichel
2018-04-13 14:19 ` [PATCH v2 12/17] wic: Add pcibios boot plugins and wks files Henning Schild
2018-04-16 10:52 ` Andreas Reichel
2018-04-16 11:48 ` Henning Schild [this message]
2018-04-13 14:19 ` [PATCH v2 13/17] scripts/start_vm: Enable booting of full disk images Henning Schild
2018-04-16 10:33 ` Andreas Reichel
2018-04-16 11:46 ` Henning Schild
2018-04-16 13:24 ` Andreas Reichel
2018-04-13 14:19 ` [PATCH v2 14/17] multiconfig: Switch qemuamd64-stretch to using wic by default Henning Schild
2018-04-16 10:25 ` Claudius Heine
2018-04-16 10:32 ` Henning Schild
2018-04-13 14:19 ` [PATCH v2 15/17] multiconfig: Switch qemui386-stretch " Henning Schild
2018-04-16 10:35 ` Andreas Reichel
2018-04-16 10:43 ` Henning Schild
2018-04-16 10:51 ` Henning Schild
2018-04-16 10:56 ` Claudius Heine
2018-04-13 14:19 ` [PATCH v2 16/17] docs: Change according to recent patches Henning Schild
2018-04-13 14:19 ` [PATCH v2 17/17] scripts/vm_smoke_test: double the timeout we wait for qemus Henning Schild
2018-04-16 10:47 ` Andreas Reichel
2018-04-16 11:45 ` Henning Schild
2018-04-25 15:53 ` [PATCH v2 00/16] wic integration Alexander Smirnov
2018-04-26 11:26 ` Henning Schild
2018-05-01 19:23 ` Alexander Smirnov
2018-05-03 16:32 ` Henning Schild
2018-05-03 16:39 ` Alexander Smirnov
2018-05-04 8:16 ` Henning Schild
2018-05-04 8:32 ` Alexander Smirnov
2018-05-04 9:30 ` Henning Schild
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180416134800.13072d29@mmd1pvb1c.ad001.siemens.net \
--to=henning.schild@siemens.com \
--cc=Cedric_Hombourger@mentor.com \
--cc=andreas.reichel.ext@siemens.com \
--cc=isar-users@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox