Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Saul Wold <sgw@linux.intel.com>
To: "Stefan Müller-Klieser" <s.mueller-klieser@phytec.de>,
	openembedded-core@lists.openembedded.org
Subject: Re: [RFC 1/1] add support for the barebox bootloader
Date: Wed, 30 Jul 2014 09:53:36 -0700	[thread overview]
Message-ID: <53D92310.9090308@linux.intel.com> (raw)
In-Reply-To: <1406720953-30774-1-git-send-email-s.mueller-klieser@phytec.de>

On 07/30/2014 04:49 AM, Stefan Müller-Klieser wrote:
> Barebox is a bootloader that inherits the best of U-Boot and the Linux
> kernel. The barebox uses kconfig and kbuild mechanisms similar to the
> Linux kernel. This is reflected in the recipe. As soon as this
> functionality gets more abstraction in classes, the barebox recipe can
> be simplified. The recipe supports: kconfig handling, kconfig fragments,
> packages for dev tools and support for the initial program loader
> creation.
>
> Signed-off-by: Stefan Müller-Klieser <s.mueller-klieser@phytec.de>
> ---
>   meta/recipes-bsp/barebox/barebox-ipl.inc          |  37 +++++
>   meta/recipes-bsp/barebox/barebox-ipl_2014.07.0.bb |   4 +
>   meta/recipes-bsp/barebox/barebox.inc              | 161 ++++++++++++++++++++++
>   meta/recipes-bsp/barebox/barebox_2014.07.0.bb     |   4 +
>   4 files changed, 206 insertions(+)
>   create mode 100644 meta/recipes-bsp/barebox/barebox-ipl.inc
>   create mode 100644 meta/recipes-bsp/barebox/barebox-ipl_2014.07.0.bb
>   create mode 100644 meta/recipes-bsp/barebox/barebox.inc
>   create mode 100644 meta/recipes-bsp/barebox/barebox_2014.07.0.bb
>
> diff --git a/meta/recipes-bsp/barebox/barebox-ipl.inc b/meta/recipes-bsp/barebox/barebox-ipl.inc
> new file mode 100644
> index 0000000..f388522
> --- /dev/null
> +++ b/meta/recipes-bsp/barebox/barebox-ipl.inc
> @@ -0,0 +1,37 @@
> +# Copyright (C) 2014 Stefan Mueller-Klieser <s.mueller-klieser@phytec.de> \
> +# PHYTEC Messtechnik GmbH
> +# Recipe released under the GPL-3.0 license
> +
Before I review this much further, I have to ask why are you licensing 
the recipe meta-data as GPL-3.0?  All the rest of the meta-data is MIT. 
  I also note that barebox itself is GPL-2.0.

Thanks
	Sau!

> +require barebox.inc
> +
> +DESCRIPTION = "Barebox IPL Inintial Program Loader: some machines need \
> +               a pre-bootloader. This one gets build by the barebox."
> +PROVIDES = "barebox-ipl"
> +S = "${WORKDIR}/barebox-${PV}"
> +
> +# Pre Bootloader
> +BAREBOX_IPL_BIN ?= "barebox.bin"
> +BAREBOX_IPL_BIN_DEPLOY ?= "IPL-${MACHINE}-${PV}-${PR}.bin"
> +BAREBOX_IPL_BIN_SYMLINK ?= "IPL"
> +BAREBOX_IPL_DEFAULT_DEFCONFIG ?= "am335x_mlo_defconfig"
> +
> +do_default_defconfig () {
> +	bbnote "generating .config for target ${BAREBOX_IPL_DEFAULT_DEFCONFIG}"
> +	unset CFLAGS LDFLAGS
> +	oe_runmake ${BAREBOX_IPL_DEFAULT_DEFCONFIG}
> +}
> +
> +do_install () {
> +	bbnote "Installing barebox-ipl image on target rootfs"
> +	install -d ${D}${base_bootdir}
> +	install ${S}/${BAREBOX_IPL_BIN} ${D}${base_bootdir}/${BAREBOX_IPL_BIN_DEPLOY}
> +	ln -sf ${BAREBOX_IPL_BIN_DEPLOY} ${D}${base_bootdir}/${BAREBOX_IPL_BIN_SYMLINK}
> +}
> +FILES_${PN} = ""
> +FILES_${PN} = "${base_bootdir}"
> +
> +do_deploy () {
> +	bbnote "Deploying barebox ipl"
> +	install ${S}/${BAREBOX_IPL_BIN} ${DEPLOYDIR}/${BAREBOX_IPL_BIN_DEPLOY}
> +	ln -sf ${BAREBOX_IPL_BIN_DEPLOY} ${DEPLOYDIR}/${BAREBOX_IPL_BIN_SYMLINK}
> +}
> diff --git a/meta/recipes-bsp/barebox/barebox-ipl_2014.07.0.bb b/meta/recipes-bsp/barebox/barebox-ipl_2014.07.0.bb
> new file mode 100644
> index 0000000..372828a
> --- /dev/null
> +++ b/meta/recipes-bsp/barebox/barebox-ipl_2014.07.0.bb
> @@ -0,0 +1,4 @@
> +require barebox-ipl.inc
> +
> +SRC_URI[md5sum] = "f3a93950777916d4b1c2cd366aec8d91"
> +SRC_URI[sha256sum] = "6dca5c78de8565a15aaa404edbf1bc4663415f0dc69e094f3b621636876285f2"
> diff --git a/meta/recipes-bsp/barebox/barebox.inc b/meta/recipes-bsp/barebox/barebox.inc
> new file mode 100644
> index 0000000..b7885df
> --- /dev/null
> +++ b/meta/recipes-bsp/barebox/barebox.inc
> @@ -0,0 +1,161 @@
> +# Copyright (C) 2014 Stefan Mueller-Klieser <s.mueller-klieser@phytec.de>
> +# PHYTEC Messtechnik GmbH
> +# Recipe released under the GPL-3.0 license
> +#
> +# TODO: see if there is some development towards moving all kconfig
> +#       funcionality into the kconfig-frontends package and adjust
> +#       the recipe accordingly.
> +#
> +
> +SUMMARY = "The Barebox Bootloader"
> +DESCRIPTION = "Barebox (formerly known as u-boot-v2) is a bootloader that \
> +               inherits the best of U-Boot and the Linux kernel: The size and \
> +	       look-and-feel of u-boot, with driver model and lots of design \
> +	       concepts from the kernel. \
> +	       The bb recipe adds config fragment support and kconfig \
> +	       command handling using the yocto kern-tools-native."
> +HOMEPAGE = "http://www.barebox.org"
> +SECTION = "bootloaders"
> +PROVIDES = "virtual/bootloader barebox"
> +LICENSE = "GPL-2.0"
> +LIC_FILES_CHKSUM = "file://COPYING;md5=057bf9e50e1ca857d0eb97bfe4ba8e5d"
> +SRC_URI = "http://barebox.org/download/barebox-${PV}.tar.bz2"
> +
> +inherit kernel-arch cml1 deploy
> +DEPENDS += "kern-tools-native"
> +PACKAGE_ARCH = "${MACHINE_ARCH}"
> +# verbose build 0/1
> +VERBOSE_BUILD ?= "0"
> +EXTRA_OEMAKE = 'V=${VERBOSE_BUILD} CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}"'
> +# target rootfs boot directory
> +base_bootdir = "/boot"
> +
> +# these variables need to be assigned in the machine.conf
> +# name of the image created by barebox Makefile
> +BAREBOX_BIN ?= "barebox.bin"
> +# filename of file to be deployed by this recipe
> +BAREBOX_BIN_DEPLOY ?= "barebox-${MACHINE}-${PV}-${PR}.bin"
> +BAREBOX_BIN_SYMLINK ?= "barebox.bin"
> +BAREBOX_DEFAULT_DEFCONFIG ?= ""
> +# barebox environment
> +BAREBOX_ENV ?= "defaultenv/barebox_default_env"
> +BAREBOX_ENV_DEPLOY ?= "bareboxenv-${MACHINE}-${PV}-${PR}"
> +BAREBOX_ENV_SYMLINK ?= "barebox.env"
> +
> +# returns .scc and .cfg filenames from SRC_URI
> +def find_sccs(d):
> +    sources=src_patches(d, True)
> +    sources_list=[]
> +    for s in sources:
> +        base, ext = os.path.splitext(os.path.basename(s))
> +        if ext and ext in [".scc", ".cfg"]:
> +            sources_list.append(s)
> +    return sources_list
> +
> +# uses kern-tools-native to merge the config fragments
> +python do_prepare_configure() {
> +    import shutil, subprocess
> +    workdir = d.getVar('WORKDIR', True)
> +    S = d.getVar('S', True)
> +    defconfig = os.path.join(workdir , 'defconfig')
> +    if not os.path.isfile(defconfig):
> +        bb.note("No defconfig file provided for the barebox recipe")
> +        config = os.path.join(S, '.config')
> +        if not os.path.isfile(config):
> +            bb.note("barebox is not configured")
> +            bb.build.exec_func("do_default_defconfig",d)
> +        bb.build.exec_func("do_savedefconfig",d)
> +        defconfig = os.path.join(workdir , 'defconfig.temp')
> +    os.chdir(workdir)
> +    fragments = find_sccs(d)
> +    if not fragments:
> +        bb.note("no config fragments will be merged")
> +    else:
> +        bb.note("combining kconfig fragments into .config for barebox")
> +        cmd = 'merge_config.sh -m -O %s %s %s' % (S, defconfig, ' '.join(map(str,fragments)))
> +        subprocess.call(cmd, shell=True)
> +    localversion = "-${DISTRO}-${DISTRO_VERSION}"
> +    bb.note("Setting LOCALVERSION in .config to %s" % localversion)
> +    bareboxconfig = os.path.join(S, '.config')
> +    cmd = 'kconfig-tweak --file %s --set-str LOCALVERSION %s' % (bareboxconfig, localversion)
> +    subprocess.call(cmd,shell=True)
> +}
> +do_configure[prefuncs] += "do_prepare_configure"
> +
> +do_default_defconfig () {
> +	bbnote "generating .config for target ${BAREBOX_DEFAULT_DEFCONFIG}"
> +	unset CFLAGS LDFLAGS
> +	oe_runmake ${BAREBOX_DEFAULT_DEFCONFIG}
> +}
> +
> +do_savedefconfig() {
> +	bbplain "saving defconfig to ${WORKDIR}/defconfig.temp"
> +	oe_runmake savedefconfig
> +	install -m 644 ${S}/defconfig ${WORKDIR}/defconfig.temp
> +}
> +addtask savedefconfig after do_configure
> +
> +do_compile () {
> +	unset CFLAGS LDFLAGS
> +	oe_runmake all
> +}
> +
> +do_install () {
> +	bbnote "Installing barebox image on target rootfs"
> +	install -d ${D}${base_bootdir}
> +	install ${S}/${BAREBOX_BIN} ${D}${base_bootdir}/${BAREBOX_BIN_DEPLOY}
> +	ln -sf ${BAREBOX_BIN_DEPLOY} ${D}${base_bootdir}/${BAREBOX_BIN_SYMLINK}
> +
> +	if [ -e ${S}/${BAREBOX_ENV} ] ; then
> +		bbnote "Installing barebox-env on target rootfs"
> +		install ${S}/${BAREBOX_ENV} ${D}${base_bootdir}/${BAREBOX_ENV_DEPLOY}
> +		ln -sf ${BAREBOX_ENV_DEPLOY} ${D}${base_bootdir}/${BAREBOX_ENV_SYMLINK}
> +	fi
> +
> +	if [ -e ${S}/scripts/bareboxenv-target ] ; then
> +		bbnote "Installing target env tool"
> +		install -d ${D}${base_sbindir}
> +		install -m 744 ${S}/scripts/bareboxenv-target ${D}${base_sbindir}/bareboxenv
> +	fi
> +
> +	if [ -e ${S}/scripts/bareboxcrc32-target ] ; then
> +		bbnote "Installing target crc32 tool"
> +		install -d ${D}${base_sbindir}
> +		install -m 744 ${S}/scripts/bareboxcrc32-target ${D}${base_sbindir}/bareboxcrc32
> +	fi
> +
> +	if [ -e ${S}/scripts/kernel-install-target ] ; then
> +		bbnote "Installing target kernel-install tool"
> +		install -d ${D}${base_sbindir}
> +		install -m 744 ${S}/scripts/kernel-install-target ${D}${base_sbindir}/barebox-kernel-install
> +	fi
> +}
> +FILES_${PN} = ""
> +FILES_${PN} += "${base_bootdir}"
> +FILES_${PN}-dev = ""
> +RDEPENDS_${PN}-dev = ""
> +FILES_${PN}-dev += "${base_sbindir}"
> +
> +
> +do_deploy () {
> +	bbnote "Deploying barebox"
> +	install -d ${DEPLOYDIR}
> +	install ${S}/${BAREBOX_BIN} ${DEPLOYDIR}/${BAREBOX_BIN_DEPLOY}
> +	cd ${DEPLOYDIR}
> +	rm -f ${BAREBOX_BIN_SYMLINK}
> +	ln -sf ${BAREBOX_BIN_DEPLOY} ${BAREBOX_BIN_SYMLINK}
> +
> +	if [ -e ${S}/${BAREBOX_ENV} ] ; then
> +		bbnote "Deploying barebox env"
> +		install ${S}/${BAREBOX_ENV} ${DEPLOYDIR}/${BAREBOX_ENV_DEPLOY}
> +		cd ${DEPLOYDIR}
> +		rm -f ${BAERBOX_ENV_SYMLINK}
> +		ln -sf ${BAREBOX_ENV_DEPLOY} ${BAREBOX_ENV_SYMLINK}
> +	fi
> +
> +	bbnote "Installing host barebox toolset"
> +	install -d ${STAGING_BINDIR_NATIVE}
> +	cd ${S}
> +	install -m 755 scripts/bareboxenv ${STAGING_BINDIR_NATIVE}/
> +}
> +addtask deploy before do_build after do_compile
> diff --git a/meta/recipes-bsp/barebox/barebox_2014.07.0.bb b/meta/recipes-bsp/barebox/barebox_2014.07.0.bb
> new file mode 100644
> index 0000000..a311ca9
> --- /dev/null
> +++ b/meta/recipes-bsp/barebox/barebox_2014.07.0.bb
> @@ -0,0 +1,4 @@
> +require barebox.inc
> +
> +SRC_URI[md5sum] = "f3a93950777916d4b1c2cd366aec8d91"
> +SRC_URI[sha256sum] = "6dca5c78de8565a15aaa404edbf1bc4663415f0dc69e094f3b621636876285f2"
>


  parent reply	other threads:[~2014-07-30 16:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-30 11:49 [RFC 1/1] add support for the barebox bootloader Stefan Müller-Klieser
2014-07-30 14:19 ` David Vincent
2014-07-30 16:53 ` Saul Wold [this message]
2014-07-31  7:04   ` Stefan Müller-Klieser
2014-07-31  7:30     ` Richard Purdie

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=53D92310.9090308@linux.intel.com \
    --to=sgw@linux.intel.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=s.mueller-klieser@phytec.de \
    /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