[meta-intel] [PATCHv5 05/10] rmc: add recipe and bbclass for RMC feature

Saul Wold sgw at linux.intel.com
Wed Aug 3 12:51:41 PDT 2016


On Wed, 2016-08-03 at 11:04 -0700, Jianxun Zhang wrote:
> RMC Feature is based on RMC project, systemd-boot, EFI installer
> to enable a single generic image, built for multiple platforms,
> automatically applies customization and quirks specific to a type
> of boards at runtime.
> 
> In another word, you will see a single image behaves differently
> and intelligently according to the type of board it is running on.
> 
> To Enable this feature: add the two lines in conf file:
> DISTRO_FEATURES_append = " rmc"
> EFI_PROVIDER = "rmc-systemd-boot"
> 
> Based on Saul Wold's initial work on a feature switch, RMC patches
> in systemd-boot, installer and gnu-efi aren't built unless the
> feature is enabled.
> 
> For a supported board, this feature can :
> () show and boot with board-specific boot entries in boot menu
> in live-boot and post-installation.
> 
> () apply a kernel cmdline fragment to the end of cmdline to boot
> Linux kernel. This is effective for any boot entry user chooses in
> boot menu.
> 
> () create directory and deploy files only for the type of the
> running board to target's file systems. What left on target after
> installation is just same as the result from installing a
> conventional
> image customized for a single type of hardware.
> 
> To add support of new boards, a new variable RMC_BOARD_DATA_DIRS
> is the interface to developers. How-to information will be provided
> with examples in following patches.
> 
> Signed-off-by: Jianxun Zhang <jianxun.zhang at linux.intel.com>


Reviewed-by: Saul Wold <sgw at linux.intel.com>
> ---
>  classes/rmc-systemd-boot.bbclass | 12 ++++++++++
>  common/recipes-bsp/rmc/rmc-db.bb | 48
> ++++++++++++++++++++++++++++++++++++++++
>  conf/layer.conf                  | 10 +++++++++
>  3 files changed, 70 insertions(+)
>  create mode 100644 classes/rmc-systemd-boot.bbclass
>  create mode 100644 common/recipes-bsp/rmc/rmc-db.bb
> 
> diff --git a/classes/rmc-systemd-boot.bbclass b/classes/rmc-systemd-
> boot.bbclass
> new file mode 100644
> index 0000000..ad2cf10
> --- /dev/null
> +++ b/classes/rmc-systemd-boot.bbclass
> @@ -0,0 +1,12 @@
> +# rmc-systemd-boot bbclass
> +# Deploy central RMC database file to ESP
> +
> +IMAGE_INSTALL_append = " rmc"
> +
> +inherit systemd-boot
> +
> +do_bootimg[depends] += "${MLPREFIX}rmc-db:do_deploy"
> +
> +efi_populate_append() {
> +        install -m 0400 ${DEPLOY_DIR_IMAGE}/rmc.db ${DEST}/rmc.db
> +}
> diff --git a/common/recipes-bsp/rmc/rmc-db.bb b/common/recipes-
> bsp/rmc/rmc-db.bb
> new file mode 100644
> index 0000000..14553af
> --- /dev/null
> +++ b/common/recipes-bsp/rmc/rmc-db.bb
> @@ -0,0 +1,48 @@
> +SUMMARY = "Central RMC Database"
> +DESCRIPTION = "Generate a centralized RMC database for RMC feature.
> \
> +Fingerprints and data for all boards supported are specified by
> variable \
> +RMC_BOARD_DATA_DIRS which is a list of top directories that contains
> \
> +subdirectories for boards. Developers can add their top directories
> by appending \
> +them to this variable in a rmc-db.bbappend.Refer to rmc-db bbclass
> for more \
> +information."
> +
> +LICENSE = "MIT"
> +
> +LIC_FILES_CHKSUM =
> "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"
> +
> +S = "${WORKDIR}"
> +
> +inherit rmc-db
> +
> +RMC_BOARD_DATA_DIRS_append := " ${THISDIR}/boards/"
> +RMC_DB_DIR = "${WORKDIR}/db"
> +
> +# Let sstate be aware of change in any added board directories
> +do_generate_rmc_db[file-checksums] = "${@get_rmc_top_dirs_list(d)}"
> +
> +# derived from get_lic_checksum_file_list(d) in base.bbclass in OE
> +def get_rmc_top_dirs_list(d):
> +    dirlist = []
> +    dirs = d.getVar("RMC_BOARD_DATA_DIRS", True) or ''
> +    topdirs = dirs.split()
> +    for each in topdirs:
> +        dirlist.append(each + ":" + str(os.path.exists(each)))
> +    return " ".join(dirlist)
> +
> +do_generate_rmc_db () {
> +	rmc_generate_db "${RMC_BOARD_DATA_DIRS}"
> "${RMC_DB_DIR}"/rmc.db
> +}
> +
> +addtask generate_rmc_db  after do_compile
> +
> +inherit deploy
> +
> +do_deploy () {
> +	if [ -f ${RMC_DB_DIR}/rmc.db ]; then
> +		install -m 0400 ${RMC_DB_DIR}/rmc.db ${DEPLOYDIR}
> +	else
> +		echo "Warning: no RMC central database found, skip
> deployment."
> +	fi
> +}
> +
> +addtask deploy after do_generate_rmc_db
> diff --git a/conf/layer.conf b/conf/layer.conf
> index d8e5000..41e42e8 100644
> --- a/conf/layer.conf
> +++ b/conf/layer.conf
> @@ -15,3 +15,13 @@ LICENSE_PATH += "${LAYERDIR}/common/custom-
> licenses"
>  # This should only be incremented on significant changes that will
>  # cause compatibility issues with other layers
>  LAYERVERSION_intel = "3"
> +
> +
> +# Exclude RMC patches unless RMC Feature is eanbled
> +RMC_BBMASK := "${LAYERDIR}/common/recipes-bsp/systemd-boot/systemd-
> boot.*\.bbappend \
> +               ${LAYERDIR}/common/recipes-
> core/initrdscripts/initramfs-live-install-efi.*\.bbappend \
> +               ${LAYERDIR}/common/recipes-bsp/gnu-efi/gnu-
> efi.*\.bbappend"
> +
> +BBMASK += "${RMC_BBMASK}"
> +
> +BBMASK_remove = "${@bb.utils.contains('DISTRO_FEATURES', 'rmc',
> '${RMC_BBMASK}', '', d)}"
> -- 
> 2.7.4
> 


More information about the meta-intel mailing list