mirror of
git://git.yoctoproject.org/meta-intel.git
synced 2025-07-19 21:09:03 +02:00

Different firmware revisions often result in different fingerprints for the same hardware platform. This change allows multiple fingerprints to be stored in the same board directory to avoid having to duplicate the data for each record. Signed-off-by: Todor Minchev <todor.minchev@linux.intel.com> Signed-off-by: Saul Wold <sgw@linux.intel.com>
93 lines
2.4 KiB
Plaintext
93 lines
2.4 KiB
Plaintext
# 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
|
|
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
|
|
|
|
for fp in ${CUR_FINGERPRINT}; do
|
|
fullname=$(basename ${fp})
|
|
CUR_TAG="${fullname%.*}"
|
|
CUR_RECORD=${RMC_DB_DIR}/${CUR_TAG}.rec
|
|
rmc -R -f ${fp} -b ${CUR_FILES} -o ${CUR_RECORD}
|
|
RMC_RECORDS="${RMC_RECORDS} ${CUR_RECORD}"
|
|
done
|
|
done
|
|
done
|
|
|
|
if [ ! -z "${RMC_RECORDS}" ]; then
|
|
rmc -D ${RMC_RECORDS} -o "$2"
|
|
fi
|
|
}
|