On Wed, 2016-08-03 at 11:04 -0700, Jianxun Zhang wrote: > RMC recipe fetch RMC project and build it more than once in > build time: > > RMC tool is built for host architecture (native). The tool for > host is used to generate RMC database in build time. > > RMC tool is also built for target architecture, so that scripts > in user space can call RMC tool on a running target. Developers > can also boot a target and run rmc tool to obtain fingerprint > for a new board type. > > RMC libraries are compiled for both of UEFI context and user > space. They are always linked in RMC tool and can be linked > into an EFI bootloader. The recipes don't install libraries > for target's user space until we have a new client needs it. > > The rmc-db.bbclass provides functions to generate rmc database > file for other software components to reuse. > > We absorb a patch from Tom Zanussi to update source location with > the public link. We could put this change in another commit, but > leaving the replaced internal link in this commit could cause > trouble when people bisect the project but don't have access to > the internal location: > ---------------------- > rmc: Update to use public repo > > The repo the rmc recipe was pointing to was private - it's now > public > Signed-off-by: Tom Zanussi <[email protected]> > common/recipes-bsp/rmc/rmc.inc | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/common/recipes-bsp/rmc/rmc.inc b/common/recipes- > bsp/rmc/rmc.inc > index c046e2e..bdf930d 100644 > --- a/common/recipes-bsp/rmc/rmc.inc > +++ b/common/recipes-bsp/rmc/rmc.inc > @@ -15,7 +15,7 @@ LICENSE = "MIT" > > LIC_FILES_CHKSUM = > "file://COPYING;md5=bcdd376d27b26bde6afadd67aa3c8b07" > > -SRC_URI = "git://[email protected]/rmc;protocol=ssh" > +SRC_URI = "git://git.yoctoproject.org/rmc" > ... > ---------------------- > > Signed-off-by: Jianxun Zhang <[email protected]>
Reviewed-by: Saul Wold <[email protected]> > > --- > classes/rmc-db.bbclass | 92 > +++++++++++++++++++++++++++++++++++++++++++ > common/recipes-bsp/rmc/rmc.bb | 46 ++++++++++++++++++++++ > 2 files changed, 138 insertions(+) > create mode 100644 classes/rmc-db.bbclass > create mode 100644 common/recipes-bsp/rmc/rmc.bb > > diff --git a/classes/rmc-db.bbclass b/classes/rmc-db.bbclass > new file mode 100644 > index 0000000..0fb4c27 > --- /dev/null > +++ b/classes/rmc-db.bbclass > @@ -0,0 +1,92 @@ > +# RMC database bbclass > +# provide functions to generate RMC database file on build host > (native) > + > +DEPENDS += "rmc-native" > + > +# rmc_generate_db() > +# $1: a list of directories. Each directory holds directories for a > group of > +# boards. > +# $2: path_name of rmc generates database file and records > +# > +# WARNING: content of directory of database file will be removed. > +# > +# Each board directory shall contain a fingerprint file (*.fp) at > least, with > +# optional file blob(s) associated to the type of board. If a board > directory > +# has no file blob, no record is created for that board. > +# > +# An example of two directories each of which contains two boards > for RMC: > +# (All file and directory names are for illustration purpose.) > +# > +# dir_1/ > +# board_1/ > +# board_1_fingerprint.fp > +# file_1.blob > +# board_2/ > +# board_2.fp > +# dir_2/ > +# board_3/ > +# b3.fp > +# file_1.blob > +# file_2.conf > +# board_4/ > +# board_foo.fp > +# mylib.config > +# > +# To generate a RMC database "rmc.db" with data of all (actually 3) > of boards in > +# a directory "deploy_dir": > +# > +# rmc_generate_db "dir_1 dir_2" "deploy_dir/rmc.db" > +# > +# The board_2 will be skipped. No record or any data for it is > packed in > +# generated database because it only contains a fingerprint file. > +# > + > +rmc_generate_db () { > + RMC_BOARD_DIRS=$1 > + > + if [ "$#" -ne 2 ]; then > + echo "rmc_generate_db(): Wrong number of arguments: > $#" > + return 1 > + fi > + > + RMC_DB_DIR=$(dirname "$2") > + RMC_RECORDS="" > + > + rm -rf ${RMC_DB_DIR} > + mkdir -p ${RMC_DB_DIR} > + > + # generate rmc database > + for topdir in ${RMC_BOARD_DIRS}; do > + # For all board dirs in a topdir: > + CUR_BOARD_DIRS=$(find ${topdir}/* -type d) > + for board_dir in ${CUR_BOARD_DIRS}; do > + # FIXME: we shall fail when having more than > one .fp file > + CUR_FINGERPRINT=$(find ${board_dir}/ -name > "*.fp") > + > + # disallow a board directory without any > fingerprint file in it. > + if [ -z "${CUR_FINGERPRINT}" ]; then > + echo "Cannot find RMC fingerprint > file in ${board_dir}" > + return 1 > + fi > + > + CUR_FILES=$(find ${board_dir}/ -type f |grep > -v '\.fp$' || true) > + > + # allow a directory only with fingerprint > file. Developer may > + # check in fingerprint for future use. > + if [ -z "${CUR_FILES}" ]; then > + continue > + fi > + > + CUR_TAG=$(echo "${board_dir}"|sed 's/\//- > /g') > + CUR_RECORD=${RMC_DB_DIR}/rmc${CUR_TAG}.rec > + > + rmc -R -f ${CUR_FINGERPRINT} -b ${CUR_FILES} > -o ${CUR_RECORD} > + > + RMC_RECORDS="${RMC_RECORDS} ${CUR_RECORD}" > + done > + done > + > + if [ ! -z "${RMC_RECORDS}" ]; then > + rmc -D ${RMC_RECORDS} -o "$2" > + fi > +} > diff --git a/common/recipes-bsp/rmc/rmc.bb b/common/recipes- > bsp/rmc/rmc.bb > new file mode 100644 > index 0000000..d8e538b > --- /dev/null > +++ b/common/recipes-bsp/rmc/rmc.bb > @@ -0,0 +1,46 @@ > +SUMMARY = "RMC (Runtime Machine Configuration)" > + > +DESCRIPTION = "RMC project provides a tool and libraries to identify > types \ > +of hardware boards and access any file-based data specific to the > board's \ > +type at runtime in a centralized way. Software (clients) can have a > generic \ > +logic to query board-specific data from RMC without knowing the type > of board. \ > +This make it possible to have a generic software work running on > boards which \ > +require any quirks or customizations at a board or product level. \ > +" > + > +LICENSE = "MIT" > + > +LIC_FILES_CHKSUM = > "file://COPYING;md5=838c366f69b72c5df05c96dff79b35f2" > + > +SRC_URI = "git://git.yoctoproject.org/rmc" > + > +SRCREV = "9bc0f645729bb41e050395fbfac170fca351b3b8" > + > +S = "${WORKDIR}/git" > + > +DEPENDS_class-target = "gnu-efi" > + > +# from gnu-efi, we should align arch-mapping with it. > +def rmc_efi_arch(d): > + import re > + arch = d.getVar("TARGET_ARCH", True) > + if re.match("i[3456789]86", arch): > + return "ia32" > + return arch > + > +do_compile_class-target() { > + oe_runmake > + oe_runmake RMC_EFI_HEADER_PREFIX=${STAGING_INCDIR}/efi > RMC_EFI_ARCH="${@rmc_efi_arch(d)}" -f Makefile.efi > +} > + > +do_install() { > + oe_runmake RMC_EFI_ARCH="${@rmc_efi_arch(d)}" > RMC_INSTALL_PREFIX=${D}/usr install > + oe_runmake RMC_EFI_ARCH="${@rmc_efi_arch(d)}" > RMC_INSTALL_PREFIX=${D}/usr -f Makefile.efi install > +} > + > +do_install_class-native() { > + install -d ${D}${STAGING_BINDIR_NATIVE} > + install -m 0755 ${S}/src/rmc ${D}${STAGING_BINDIR_NATIVE} > +} > + > +BBCLASSEXTEND = "native" > -- > 2.7.4 > -- _______________________________________________ meta-intel mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-intel
