Add Arm Trusted Firmware for stm32mp machine
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@st.com>
This commit is contained in:
parent
a91a0e4488
commit
3fef5201b0
|
|
@ -0,0 +1,261 @@
|
||||||
|
COMPATIBLE_MACHINE = "(stm32mpcommon)"
|
||||||
|
|
||||||
|
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||||
|
|
||||||
|
FILESEXTRAPATHS_prepend := "${THISDIR}/tf-a-stm32mp:"
|
||||||
|
|
||||||
|
inherit deploy
|
||||||
|
|
||||||
|
B = "${WORKDIR}/build"
|
||||||
|
# Configure build dir for externalsrc class usage through devtool
|
||||||
|
EXTERNALSRC_BUILD_pn-${PN} = "${WORKDIR}/build"
|
||||||
|
|
||||||
|
DEPENDS += "dtc-native"
|
||||||
|
|
||||||
|
# Define default TF-A namings
|
||||||
|
TF_A_BASENAME ?= "tf-a"
|
||||||
|
TF_A_SUFFIX ?= "stm32"
|
||||||
|
|
||||||
|
# Output the ELF generated
|
||||||
|
ELF_DEBUG_ENABLE ?= ""
|
||||||
|
TF_A_ELF_SUFFIX = "elf"
|
||||||
|
|
||||||
|
BL1_NAME ?= "bl1/bl1"
|
||||||
|
BL1_ELF = "${BL1_NAME}.${TF_A_ELF_SUFFIX}"
|
||||||
|
BL1_BASENAME = "${@os.path.basename(d.getVar("BL1_NAME"))}"
|
||||||
|
|
||||||
|
BL2_NAME ?= "bl2/bl2"
|
||||||
|
BL2_ELF = "${BL2_NAME}.${TF_A_ELF_SUFFIX}"
|
||||||
|
BL2_BASENAME = "${@os.path.basename(d.getVar("BL2_NAME"))}"
|
||||||
|
|
||||||
|
BL32_NAME ?= "bl32/bl32"
|
||||||
|
BL32_ELF = "${BL32_NAME}.${TF_A_ELF_SUFFIX}"
|
||||||
|
BL32_BASENAME = "${@os.path.basename(d.getVar("BL32_NAME"))}"
|
||||||
|
|
||||||
|
# Extra make settings
|
||||||
|
EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX}'
|
||||||
|
EXTRA_OEMAKE += 'PLAT=stm32mp1'
|
||||||
|
EXTRA_OEMAKE += 'ARCH=aarch32'
|
||||||
|
EXTRA_OEMAKE += 'ARM_ARCH_MAJOR=7'
|
||||||
|
|
||||||
|
# Debug support
|
||||||
|
EXTRA_OEMAKE += 'DEBUG=1'
|
||||||
|
EXTRA_OEMAKE += "LOG_LEVEL=40"
|
||||||
|
|
||||||
|
# Set default TF-A config
|
||||||
|
TF_A_CONFIG ?= ""
|
||||||
|
|
||||||
|
# -----------------------------------------------
|
||||||
|
# Enable use of work-shared folder
|
||||||
|
STAGING_TFA_DIR = "${TMPDIR}/work-shared/${MACHINE}/tfa-source"
|
||||||
|
# Make sure to move ${S} to STAGING_TFA_DIR. We can't just
|
||||||
|
# create the symlink in advance as the git fetcher can't cope with
|
||||||
|
# the symlink.
|
||||||
|
do_unpack[cleandirs] += " ${S} ${STAGING_TFA_DIR}"
|
||||||
|
do_clean[cleandirs] += " ${S} ${STAGING_TFA_DIR}"
|
||||||
|
base_do_unpack_append () {
|
||||||
|
# Specific part to update devtool-source class
|
||||||
|
if bb.data.inherits_class('devtool-source', d):
|
||||||
|
# We don't want to move the source to STAGING_TFA_DIR here
|
||||||
|
if d.getVar('STAGING_TFA_DIR', d):
|
||||||
|
d.setVar('STAGING_TFA_DIR', '${S}')
|
||||||
|
|
||||||
|
# Copy/Paste from kernel class with adaptation to TFA var
|
||||||
|
s = d.getVar("S")
|
||||||
|
if s[-1] == '/':
|
||||||
|
# drop trailing slash, so that os.symlink(tfasrc, s) doesn't use s as directory name and fail
|
||||||
|
s=s[:-1]
|
||||||
|
tfasrc = d.getVar("STAGING_TFA_DIR")
|
||||||
|
if s != tfasrc:
|
||||||
|
bb.utils.mkdirhier(tfasrc)
|
||||||
|
bb.utils.remove(tfasrc, recurse=True)
|
||||||
|
if d.getVar("EXTERNALSRC"):
|
||||||
|
# With EXTERNALSRC S will not be wiped so we can symlink to it
|
||||||
|
os.symlink(s, tfasrc)
|
||||||
|
else:
|
||||||
|
import shutil
|
||||||
|
shutil.move(s, tfasrc)
|
||||||
|
os.symlink(tfasrc, s)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Manage to export any specific setting for defined configs
|
||||||
|
python tfaconfig_env () {
|
||||||
|
if d.getVar('TF_A_CONFIG'):
|
||||||
|
try:
|
||||||
|
f = open( ("%s/tfaconfig_env" % d.getVar('T')), 'w')
|
||||||
|
for config in d.getVar('TF_A_CONFIG').split():
|
||||||
|
f.write( "export TF_A_CONFIG_%s=\"%s\"\n" % (config, d.getVar(('TF_A_CONFIG_' + config))) )
|
||||||
|
f.close()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
do_compile[prefuncs] += "tfaconfig_env"
|
||||||
|
|
||||||
|
do_compile() {
|
||||||
|
. ${T}/tfaconfig_env
|
||||||
|
|
||||||
|
unset LDFLAGS
|
||||||
|
unset CFLAGS
|
||||||
|
unset CPPFLAGS
|
||||||
|
|
||||||
|
for config in ${TF_A_CONFIG}; do
|
||||||
|
# Get any specific EXTRA_OEMAKE for current config
|
||||||
|
eval local add_extraoemake=\"\$TF_A_CONFIG_${config}\"
|
||||||
|
if [ -n "${TF_A_DEVICETREE}" ]; then
|
||||||
|
for dt in ${TF_A_DEVICETREE}; do
|
||||||
|
oe_runmake -C ${S} DTB_FILE_NAME=${dt}.dtb BUILD_PLAT=${B}/${config} ${add_extraoemake}
|
||||||
|
cp ${B}/${config}/${TF_A_BASENAME}-${dt}.${TF_A_SUFFIX} ${B}/${config}/${TF_A_BASENAME}-${dt}-${config}.${TF_A_SUFFIX}
|
||||||
|
done
|
||||||
|
else
|
||||||
|
oe_runmake -C ${S} BUILD_PLAT=${B}/${config} ${add_extraoemake}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
do_deploy() {
|
||||||
|
install -d ${DEPLOYDIR}
|
||||||
|
|
||||||
|
for config in ${TF_A_CONFIG}; do
|
||||||
|
if [ -n "${TF_A_DEVICETREE}" ]; then
|
||||||
|
for dt in ${TF_A_DEVICETREE}; do
|
||||||
|
install -m 644 ${B}/${config}/${TF_A_BASENAME}-${dt}-${config}.${TF_A_SUFFIX} ${DEPLOYDIR}
|
||||||
|
done
|
||||||
|
else
|
||||||
|
# Get tf-a binary basename to copy
|
||||||
|
tf_a_binary_basename=$(find ${B}/${config} -name "${TF_A_BASENAME}-*.${TF_A_SUFFIX}" -exec basename {} \; | sed 's|\.'"${TF_A_SUFFIX}"'||g')
|
||||||
|
install -m 644 ${B}/${config}/${tf_a_binary_basename}.${TF_A_SUFFIX} ${DEPLOYDIR}/${tf_a_binary_basename}-${config}.${TF_A_SUFFIX}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "${ELF_DEBUG_ENABLE}" ]; then
|
||||||
|
for config in ${TF_A_CONFIG}; do
|
||||||
|
if [ -f ${B}/${config}/${BL1_ELF} ]; then
|
||||||
|
install -m 644 ${B}/${config}/${BL1_ELF} ${DEPLOYDIR}/${TF_A_BASENAME}-${BL1_BASENAME}-${config}.${TF_A_ELF_SUFFIX}
|
||||||
|
fi
|
||||||
|
if [ -f ${B}/${config}/${BL2_ELF} ]; then
|
||||||
|
install -m 644 ${B}/${config}/${BL2_ELF} ${DEPLOYDIR}/${TF_A_BASENAME}-${BL2_BASENAME}-${config}.${TF_A_ELF_SUFFIX}
|
||||||
|
fi
|
||||||
|
if [ -f ${B}/${config}/${BL32_ELF} ]; then
|
||||||
|
install -m 644 ${B}/${config}/${BL32_ELF} ${DEPLOYDIR}/${TF_A_BASENAME}-${BL32_BASENAME}-${config}.${TF_A_ELF_SUFFIX}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
addtask deploy before do_build after do_compile
|
||||||
|
|
||||||
|
|
||||||
|
# -----------------------------------------------
|
||||||
|
# Archiver
|
||||||
|
inherit archiver
|
||||||
|
ARCHIVER_MODE[src] = "${@'original' if d.getVar('ST_ARCHIVER_ENABLE') == '1' else ''}"
|
||||||
|
|
||||||
|
inherit archiver_stm32mp_clean
|
||||||
|
SRC_URI =+ " file://README.HOW_TO.txt "
|
||||||
|
|
||||||
|
archiver_create_makefile_for_sdk() {
|
||||||
|
. ${T}/tfaconfig_env
|
||||||
|
|
||||||
|
# Init internal var for tfa_config_oemake: should be 'config,extraoemake'
|
||||||
|
for config in ${TF_A_CONFIG}; do
|
||||||
|
tf_a_config_oemake="${tf_a_config_oemake} ${config},$(eval echo \$TF_A_CONFIG_${config})"
|
||||||
|
done
|
||||||
|
|
||||||
|
mkdir -p ${ARCHIVER_OUTDIR}
|
||||||
|
#remove default variable
|
||||||
|
echo "LDFLAGS=" > ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "CFLAGS=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "CPPFLAGS=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "CC=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "CPP=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "AS=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "AR=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "LD=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "NM=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
echo "LOCAL_PATH=\$(PWD)" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
echo "EXTRA_OEMAKE=${EXTRA_OEMAKE}" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
# Set default config
|
||||||
|
echo "ELF_DEBUG_ENABLE ?= ${ELF_DEBUG_ENABLE}" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "TF_A_CONFIG ?= ${TF_A_CONFIG}" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
# Set specific OEMAKE config
|
||||||
|
echo "TF_A_CONFIG_OEMAKE = ${tf_a_config_oemake}" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
# Set default TFA_DEVICETREE with configured TF_A_DEVICETREE
|
||||||
|
if [ -n "${TF_A_DEVICETREE}" ]; then
|
||||||
|
echo "TFA_DEVICETREE ?= ${TF_A_DEVICETREE}" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
else
|
||||||
|
echo "TFA_DEVICETREE ?=" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
fi
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
echo "help:" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo \"Available targets:\"" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo \" all : build TF-A binaries for defined config(s)\"" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo \" clean : clean build directories from generated files\"" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo \"TF-A configuration:\"" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo \" TF_A_CONFIG = \$(TF_A_CONFIG)\"" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo \" TFA_DEVICETREE = \$(TFA_DEVICETREE)\"" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo \" ELF_DEBUG_ENABLE = '\$(ELF_DEBUG_ENABLE)' ('1' to export elf files)\"" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @echo" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
echo "all: tf" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
echo "host_tools:" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @\$(MAKE) --no-print-directory -C \$(LOCAL_PATH)/tools/stm32image" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
echo "tf: host_tools" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " for config in \$(TF_A_CONFIG) ; do \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
# Init any extraoemake
|
||||||
|
echo " add_extraoemake= ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " for fullconfig in \$(TF_A_CONFIG_OEMAKE) ; do \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " extraconfig=\$\$(echo \$\$fullconfig | cut -d',' -f1) ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " if [ \"\$\$extraconfig\" = \"\$\$config\" ]; then \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " add_extraoemake=\$\$(echo \$\$fullconfig | cut -d',' -f2) ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " fi ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " done ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " mkdir -p \$(LOCAL_PATH)/../build/\$\$config ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " if test -n \"\$(TFA_DEVICETREE)\" ; then \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " for dt in \$(TFA_DEVICETREE) ; do \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " \$(MAKE) \$(EXTRA_OEMAKE) -C \$(LOCAL_PATH) DTB_FILE_NAME=\$\$dt.dtb BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
# Copy binary file with explicit name
|
||||||
|
echo " cp -f \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-\$\$dt-\$\$config.${TF_A_SUFFIX} ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " done ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " else \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " \$(MAKE) \$(EXTRA_OEMAKE) -C \$(LOCAL_PATH) BUILD_PLAT=\$(LOCAL_PATH)/../build/\$\$config \$\$add_extraoemake; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
# Copy binary file with explicit name
|
||||||
|
echo " tf_version=\$\$(find \$(LOCAL_PATH)/../build/\$\$config -name ${TF_A_BASENAME}*.${TF_A_SUFFIX} -exec basename {} \; | sed \"s/\.${TF_A_SUFFIX}//\") ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " cp -f \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version.${TF_A_SUFFIX} \$(LOCAL_PATH)/../build/\$\$config/\$\$tf_version-\$\$config.${TF_A_SUFFIX} ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " fi ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
# Copy elf files with explicit name
|
||||||
|
echo " if [ \"\$(ELF_DEBUG_ENABLE)\" = \"1\" ] ; then \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " if [ -f \$(LOCAL_PATH)/../build/\$\$config/${BL1_ELF} ] ; then \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " cp -f \$(LOCAL_PATH)/../build/\$\$config/${BL1_ELF} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-${BL1_BASENAME}-\$\$config.${TF_A_ELF_SUFFIX} ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " fi ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " if [ -f \$(LOCAL_PATH)/../build/\$\$config/${BL2_ELF} ] ; then \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " cp -f \$(LOCAL_PATH)/../build/\$\$config/${BL2_ELF} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-${BL2_BASENAME}-\$\$config.${TF_A_ELF_SUFFIX} ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " fi ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " if [ -f \$(LOCAL_PATH)/../build/\$\$config/${BL32_ELF} ] ; then \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " cp -f \$(LOCAL_PATH)/../build/\$\$config/${BL32_ELF} \$(LOCAL_PATH)/../build/\$\$config/${TF_A_BASENAME}-${BL32_BASENAME}-\$\$config.${TF_A_ELF_SUFFIX} ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " fi ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " fi ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " done" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo "" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
|
||||||
|
echo "clean:" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " @for config in \$(TF_A_CONFIG) ; do \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " rm -rf \$(LOCAL_PATH)/../build/\$\$config ; \\" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
echo " done" >> ${ARCHIVER_OUTDIR}/Makefile.sdk
|
||||||
|
}
|
||||||
|
do_ar_original[prefuncs] += "tfaconfig_env archiver_create_makefile_for_sdk"
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,119 @@
|
||||||
|
Compilation of TF-A (Trusted Firmware-A):
|
||||||
|
1. Pre-requisite
|
||||||
|
2. Initialise cross-compilation via SDK
|
||||||
|
3. Prepare tf-a source code
|
||||||
|
4. Management of tf-a source code
|
||||||
|
5. Compile tf-a source code
|
||||||
|
6. Update software on board
|
||||||
|
|
||||||
|
1. Pre-requisite:
|
||||||
|
-----------------
|
||||||
|
OpenSTLinux SDK must be installed.
|
||||||
|
|
||||||
|
For tf-a build you need to install:
|
||||||
|
- git:
|
||||||
|
Ubuntu: sudo apt-get install git-core gitk
|
||||||
|
Fedora: sudo yum install git
|
||||||
|
|
||||||
|
If you have never configured you git configuration:
|
||||||
|
$> git config --global user.name "your_name"
|
||||||
|
$> git config --global user.email "your_email@example.com"
|
||||||
|
|
||||||
|
2. Initialise cross-compilation via SDK:
|
||||||
|
---------------------------------------
|
||||||
|
Source SDK environment:
|
||||||
|
$> source <path to SDK>/environment-setup-cortexa9hf-neon-openstlinux_weston-linux-gnueabi
|
||||||
|
|
||||||
|
To verify if your cross-compilation environment have put in place:
|
||||||
|
$> set | grep CROSS
|
||||||
|
CROSS_COMPILE=arm-openstlinux_weston-linux-gnueabi-
|
||||||
|
|
||||||
|
Warning: the environment are valid only on the shell session where you have
|
||||||
|
sourced the sdk environment.
|
||||||
|
|
||||||
|
3. Prepare tf-a source:
|
||||||
|
------------------------
|
||||||
|
If you have the tarball and the list of patch then you must extract the tarball
|
||||||
|
and apply the patch.
|
||||||
|
$> tar xfz <tf-a source>.tar.gz
|
||||||
|
or
|
||||||
|
$> tar xfj <tf-a source>.tar.bz2
|
||||||
|
or
|
||||||
|
$> tar xfJ <tf-a source>.tar.xz
|
||||||
|
$> cd <directory to tf-a source code>
|
||||||
|
|
||||||
|
NB: if there is no git management on source code and you would like to have a
|
||||||
|
git management on the code see section 4 [Management of tf-a source code]
|
||||||
|
if there is some patch, please apply it on source code
|
||||||
|
$> for p in `ls -1 <path to patch>/*.patch`; do patch -p1 < $p; done
|
||||||
|
|
||||||
|
4. Management of tf-a source code:
|
||||||
|
-----------------------------------
|
||||||
|
If you like to have a better management of change made on tf-a source, you
|
||||||
|
can use git:
|
||||||
|
$> cd <directory to tf-a source code>
|
||||||
|
$> test -d .git || git init . && git add . && git commit -m "tf-a source code" && git gc
|
||||||
|
$> git checkout -b WORKING
|
||||||
|
$> for p in `ls -1 <path to patch>/*.patch`; do git am $p; done
|
||||||
|
|
||||||
|
NB: you can use directly the source from the community:
|
||||||
|
URL: git://github.com/ARM-software/arm-trusted-firmware.git
|
||||||
|
Branch: ##GIT_BRANCH##
|
||||||
|
Revision: ##GIT_SRCREV##
|
||||||
|
|
||||||
|
$> git clone git://github.com/ARM-software/arm-trusted-firmware.git -b ##GIT_BRANCH##
|
||||||
|
$> cd <directory to tf-a source code>
|
||||||
|
$> git checkout -b WORKING ##GIT_SRCREV##
|
||||||
|
$> for p in `ls -1 <path to patch>/*.patch`; do git am $p; done
|
||||||
|
|
||||||
|
5. Build tf-a source code:
|
||||||
|
--------------------------------
|
||||||
|
To compile tf-a source code
|
||||||
|
$> cd <directory to tf-a source code>
|
||||||
|
$> make -f $PWD/../Makefile.sdk all
|
||||||
|
or for a specific config :
|
||||||
|
$> make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157c-ev1 TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all
|
||||||
|
|
||||||
|
NB: TFA_DEVICETREE flag must be set to switch to correct board configuration.
|
||||||
|
|
||||||
|
6. Update software on board:
|
||||||
|
----------------------------
|
||||||
|
6.1. partitioning of binaries:
|
||||||
|
-----------------------------
|
||||||
|
TF-A build provide a binary named "tf-a-*.stm32" which MUST be copied on a
|
||||||
|
dedicated partition named "fsbl1"
|
||||||
|
|
||||||
|
6.2. Update via SDCARD:
|
||||||
|
-----------------------
|
||||||
|
Copy the binary (tf-a-*.stm32) on the dedicated partition, on SDCARD/USB disk
|
||||||
|
the partition "fsbl1" are the partition 1:
|
||||||
|
- SDCARD: /dev/mmcblkXp1 (where X is the instance number)
|
||||||
|
- SDCARD via USB reader: /dev/sdX1 (where X is the instance number)
|
||||||
|
$> dd if=<tf-a binary> of=/dev/<device partition> bs=1M conv=fdatasync
|
||||||
|
|
||||||
|
FAQ: to found the partition associated to a specific label, just plug the
|
||||||
|
SDCARD/USB disk on your PC and call the following command:
|
||||||
|
$> ls -l /dev/disk/by-partlabel/
|
||||||
|
total 0
|
||||||
|
lrwxrwxrwx 1 root root 10 Jan 17 17:38 bootfs -> ../../mmcblk0p4
|
||||||
|
lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl1 -> ../../mmcblk0p1 ➔ FSBL (TF-A)
|
||||||
|
lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl2 -> ../../mmcblk0p2 ➔ FSBL backup (TF-A backup – same content as FSBL)
|
||||||
|
lrwxrwxrwx 1 root root 10 Jan 17 17:38 rootfs -> ../../mmcblk0p5
|
||||||
|
lrwxrwxrwx 1 root root 10 Jan 17 17:38 ssbl -> ../../mmcblk0p3 ➔ SSBL (U-Boot)
|
||||||
|
lrwxrwxrwx 1 root root 10 Jan 17 17:38 userfs -> ../../mmcblk0p6
|
||||||
|
|
||||||
|
6.3. Update via USB mass storage on U-boot:
|
||||||
|
-------------------------------------------
|
||||||
|
* Plug the SDCARD on Board.
|
||||||
|
* Start the board and stop on U-boot shell:
|
||||||
|
Hit any key to stop autoboot: 0
|
||||||
|
STM32MP>
|
||||||
|
* plug an USB cable between the PC and the board via USB OTG port.
|
||||||
|
* On U-Boot shell, call the usb mass storage functionnality:
|
||||||
|
STM32MP> ums 0 mmc 0
|
||||||
|
ums <USB controller> <dev type: mmc|usb> <dev[:part]>
|
||||||
|
ex.:
|
||||||
|
For SDCARD: ums 0 mmc 0
|
||||||
|
For USB disk: ums 0 usb 0
|
||||||
|
|
||||||
|
* Follow section 6.2 to put tf-a-*.stm32 on SDCARD/USB disk
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
SUMMARY = "Trusted Firmware-A for STM32MP1"
|
||||||
|
SECTION = "bootloaders"
|
||||||
|
LICENSE = "BSD-3-Clause"
|
||||||
|
LIC_FILES_CHKSUM = "file://license.rst;md5=e927e02bca647e14efd87e9e914b2443"
|
||||||
|
|
||||||
|
SRC_URI = "https://github.com/ARM-software/arm-trusted-firmware/archive/v${PV}.tar.gz"
|
||||||
|
SRC_URI[md5sum] = "21038abbf572c273fa87d296bcd5dad2"
|
||||||
|
SRC_URI[sha256sum] = "7d699a1683bb7a5909de37b6eb91b6e38db32cd6fc5ae48a08eb0718d6504ae4"
|
||||||
|
|
||||||
|
SRC_URI += " \
|
||||||
|
file://0001-st-update-r1.patch \
|
||||||
|
"
|
||||||
|
|
||||||
|
PV = "2.0"
|
||||||
|
|
||||||
|
S = "${WORKDIR}/arm-trusted-firmware-${PV}"
|
||||||
|
|
||||||
|
require tf-a-stm32mp-common.inc
|
||||||
|
|
||||||
|
# ---------------------------------
|
||||||
|
# Configure devupstream class usage
|
||||||
|
# ---------------------------------
|
||||||
|
BBCLASSEXTEND = "devupstream:target"
|
||||||
|
|
||||||
|
SRC_URI_class-devupstream = "git://github.com/STMicroelectronics/arm-trusted-firmware.git;protocol=https;branch=v2.0-stm32mp"
|
||||||
|
SRCREV_class-devupstream = "d0233623681124a85b069f97a447d7edb1cc1c02"
|
||||||
|
|
||||||
|
# ---------------------------------
|
||||||
|
# Configure default preference to manage dynamic selection between tarball and github
|
||||||
|
# ---------------------------------
|
||||||
|
STM32MP_SOURCE_SELECTION ?= "tarball"
|
||||||
|
|
||||||
|
DEFAULT_PREFERENCE = "${@bb.utils.contains('STM32MP_SOURCE_SELECTION', 'github', '-1', '1', d)}"
|
||||||
Loading…
Reference in New Issue