> On Jul 21, 2016, at 3:35 PM, Tom Zanussi <tom.zanu...@linux.intel.com> wrote: > > On 07/21/2016 03:37 AM, 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 <tom.zanu...@linux.intel.com> >> >> 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://g...@git.yoctoproject.org/rmc;protocol=ssh" >> +SRC_URI = "git://git.yoctoproject.org/rmc" >> ... >> ---------------------- >> >> Signed-off-by: Jianxun Zhang <jianxun.zh...@linux.intel.com> >> --- >> 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 >> +# > > I was easily able to accidentally create nonsense configuration and > nothing told me it was wrong. > > For example, in my BOOTENTRY.CONFIG I mistyped a filename that didn't exist: > > doesntexistboot.conf > > It would seem that would be something the user would definitely be > interested in knowing (along with any other errors in .conf files > themselves), especially since there doesn't seem to be any way on the > target to tell what the source of the problem is. > > It seems you should be able to detect that when generating the db file > on the host at least. > > Basically there doesn't seem to be any way to determine the cause of > problems other than inspection, which is going to cause lots of > complaints from users. > The feature’s design will be coupled with different things if we just copy that parser from installer to bbclass. DB is created in a generic function in build time. INSTALLER.CONFIG is a special (policy) file for EFI installer. A better way is to have a special hook to DB function, so that each client (bootloader, installer) can add its checker at build time.
Totally agree with you that we need checkers. Could I fix this after 1st merge? > Tom > > >> +# 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" -- _______________________________________________ meta-intel mailing list meta-intel@yoctoproject.org https://lists.yoctoproject.org/listinfo/meta-intel