Loading arch/arm64/boot/Makefile +15 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,21 @@ OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S targets := Image Image.bz2 Image.gz Image.lz4 Image.lzma Image.lzo ifeq ($(CONFIG_QCOM_RTIC),y) # Add RTIC DTB to the DTB list if RTIC MPGen is enabled # Note, we keep this for compatibility with # BUILD_ARM64_APPENDED_DTB_IMAGE targets. # The rtic_mp.dts would be generated with the vmlinux if # MPGen enabled (RTIC_MPGEN defined). ifdef RTIC_MPGEN DTB_OBJS += rtic_mp.dtb endif rtic_mp.dtb: vmlinux FORCE $(DTC) -O dtb -o rtic_mp.dtb -b 0 $(DTC_FLAGS) rtic_mp.dts endif $(obj)/Image: vmlinux FORCE $(call if_changed,objcopy) Loading drivers/soc/qcom/Kconfig +8 −0 Original line number Diff line number Diff line Loading @@ -841,4 +841,12 @@ config QTI_HW_KEY_MANAGER HWKM hardware to perform key operations from the kernel which will be used for storage encryption. config QCOM_RTIC bool "Enable Qualcomm Technologies, Inc. RTIC feature" depends on QGKI default y if QGKI help This option enables QCOM Real Time Integrity Check feature. This will trigger RTIC kernel MP.s (measurement parameters) generation during the kernel build. endmenu scripts/link-vmlinux.sh +81 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,11 @@ vmlinux_link() vmlinux.o \ --no-whole-archive \ ${@}" if [ -n "${CONFIG_QCOM_RTIC}" ] && \ [ -n "${RTIC_MP_O}" ]; then objects=${objects}" "${RTIC_MP_O} fi else objects="--whole-archive \ ${KBUILD_VMLINUX_OBJS} \ Loading Loading @@ -229,6 +234,33 @@ kallsyms_step() kallsyms ${kallsyms_vmlinux} ${kallsymso} } # Generates ${2} .o file with RTIC MP's from the ${1} object file (vmlinux) # ${3} the file name where the sizes of the RTIC MP structure are stored # just in case, save copy of the RTIC mp to ${4} # Note: RTIC_MPGEN has to be set if MPGen is available rtic_mp() { if [ -n "${CONFIG_QCOM_RTIC}" ]; then # assume that RTIC_MP_O generation may fail RTIC_MP_O= local aflags="${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \ ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS}" ${RTIC_MPGEN} --objcopy="${OBJCOPY}" --objdump="${OBJDUMP}" \ --binpath='' --vmlinux=${1} --config=${KCONFIG_CONFIG} && \ cat rtic_mp.c | ${CC} ${aflags} -c -o ${2} -x c - && \ cp rtic_mp.c ${4} && \ ${NM} --print-size --size-sort ${2} > ${3} && \ RTIC_MP_O=${2} || echo “RTIC MP generation has failed” # NM - save generated variable sizes for verification # RTIC_MP_O is our retval - great success if set to generated .o file # Echo statement above prints the error message in case any of the # above RTIC MP generation commands fail and it ensures rtic mp failure # does not cause kernel compilation to fail. fi } # Create map file with all symbols from ${1} # See mksymap for additional details mksysmap() Loading @@ -252,6 +284,10 @@ cleanup() rm -f System.map rm -f vmlinux rm -f vmlinux.o if [ -n "${CONFIG_QCOM_RTIC}" ]; then rm -f .tmp_rtic_mp_sz* rm -f rtic_mp.* fi } on_exit() Loading Loading @@ -323,6 +359,16 @@ if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then fi fi if [ -n "${CONFIG_QCOM_RTIC}" ]; then # Generate RTIC MP placeholder compile unit of the correct size # and add it to the list of link objects # this needs to be done before generating kallsyms if [ ! -z ${RTIC_MPGEN+x} ]; then rtic_mp vmlinux.o rtic_mp.o .tmp_rtic_mp_sz1 .tmp_rtic_mp1.c KBUILD_VMLINUX_LIBS=$KBUILD_VMLINUX_LIBS" "$RTIC_MP_O fi fi kallsymso="" kallsymso_prev="" kallsyms_vmlinux="" Loading Loading @@ -363,6 +409,24 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then fi fi if [ -n "${CONFIG_QCOM_RTIC}" ]; then # Update RTIC MP object by replacing the place holder # with actual MP data of the same size # Also double check that object size did not change # Note: Check initilally if RTIC_MP_O is not empty or uninitialized, # as incase RTIC_MPGEN is set and failure occurs in RTIC_MP_O # generation, below check for comparing object sizes fails # due to an empty RTIC_MP_O object. if [ ! -z ${RTIC_MP_O} ]; then rtic_mp "${kallsyms_vmlinux}" rtic_mp.o .tmp_rtic_mp_sz2 \ .tmp_rtic_mp2.c if ! cmp -s .tmp_rtic_mp_sz1 .tmp_rtic_mp_sz2; then echo >&2 'ERROR: RTIC MP object files size mismatch' exit 1 fi fi fi vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o} if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then Loading @@ -383,3 +447,20 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then exit 1 fi fi if [ -n "${CONFIG_QCOM_RTIC}" ]; then # Starting Android Q, the DTB's are part of dtb.img and not part # of the kernel image. RTIC DTS relies on the kernel environment # and could not build outside of the kernel. Generate RTIC DTS after # successful kernel build if MPGen is enabled. The DTB will be # generated with dtb.img in kernel_definitions.mk. if [ ! -z ${RTIC_MPGEN+x} ]; then ${RTIC_MPGEN} --objcopy="${OBJCOPY}" --objdump="${OBJDUMP}" \ --binpath="" --vmlinux="vmlinux" --config=${KCONFIG_CONFIG} \ --cc="${CC} ${KBUILD_AFLAGS}" --dts=rtic_mp.dts \ || echo “RTIC MP DTS generation has failed” # Echo statement above prints the error message in case above # RTIC MP DTS generation command fails and it ensures rtic mp # failure does not cause kernel compilation to fail. fi fi Loading
arch/arm64/boot/Makefile +15 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,21 @@ OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S targets := Image Image.bz2 Image.gz Image.lz4 Image.lzma Image.lzo ifeq ($(CONFIG_QCOM_RTIC),y) # Add RTIC DTB to the DTB list if RTIC MPGen is enabled # Note, we keep this for compatibility with # BUILD_ARM64_APPENDED_DTB_IMAGE targets. # The rtic_mp.dts would be generated with the vmlinux if # MPGen enabled (RTIC_MPGEN defined). ifdef RTIC_MPGEN DTB_OBJS += rtic_mp.dtb endif rtic_mp.dtb: vmlinux FORCE $(DTC) -O dtb -o rtic_mp.dtb -b 0 $(DTC_FLAGS) rtic_mp.dts endif $(obj)/Image: vmlinux FORCE $(call if_changed,objcopy) Loading
drivers/soc/qcom/Kconfig +8 −0 Original line number Diff line number Diff line Loading @@ -841,4 +841,12 @@ config QTI_HW_KEY_MANAGER HWKM hardware to perform key operations from the kernel which will be used for storage encryption. config QCOM_RTIC bool "Enable Qualcomm Technologies, Inc. RTIC feature" depends on QGKI default y if QGKI help This option enables QCOM Real Time Integrity Check feature. This will trigger RTIC kernel MP.s (measurement parameters) generation during the kernel build. endmenu
scripts/link-vmlinux.sh +81 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,11 @@ vmlinux_link() vmlinux.o \ --no-whole-archive \ ${@}" if [ -n "${CONFIG_QCOM_RTIC}" ] && \ [ -n "${RTIC_MP_O}" ]; then objects=${objects}" "${RTIC_MP_O} fi else objects="--whole-archive \ ${KBUILD_VMLINUX_OBJS} \ Loading Loading @@ -229,6 +234,33 @@ kallsyms_step() kallsyms ${kallsyms_vmlinux} ${kallsymso} } # Generates ${2} .o file with RTIC MP's from the ${1} object file (vmlinux) # ${3} the file name where the sizes of the RTIC MP structure are stored # just in case, save copy of the RTIC mp to ${4} # Note: RTIC_MPGEN has to be set if MPGen is available rtic_mp() { if [ -n "${CONFIG_QCOM_RTIC}" ]; then # assume that RTIC_MP_O generation may fail RTIC_MP_O= local aflags="${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \ ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS}" ${RTIC_MPGEN} --objcopy="${OBJCOPY}" --objdump="${OBJDUMP}" \ --binpath='' --vmlinux=${1} --config=${KCONFIG_CONFIG} && \ cat rtic_mp.c | ${CC} ${aflags} -c -o ${2} -x c - && \ cp rtic_mp.c ${4} && \ ${NM} --print-size --size-sort ${2} > ${3} && \ RTIC_MP_O=${2} || echo “RTIC MP generation has failed” # NM - save generated variable sizes for verification # RTIC_MP_O is our retval - great success if set to generated .o file # Echo statement above prints the error message in case any of the # above RTIC MP generation commands fail and it ensures rtic mp failure # does not cause kernel compilation to fail. fi } # Create map file with all symbols from ${1} # See mksymap for additional details mksysmap() Loading @@ -252,6 +284,10 @@ cleanup() rm -f System.map rm -f vmlinux rm -f vmlinux.o if [ -n "${CONFIG_QCOM_RTIC}" ]; then rm -f .tmp_rtic_mp_sz* rm -f rtic_mp.* fi } on_exit() Loading Loading @@ -323,6 +359,16 @@ if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then fi fi if [ -n "${CONFIG_QCOM_RTIC}" ]; then # Generate RTIC MP placeholder compile unit of the correct size # and add it to the list of link objects # this needs to be done before generating kallsyms if [ ! -z ${RTIC_MPGEN+x} ]; then rtic_mp vmlinux.o rtic_mp.o .tmp_rtic_mp_sz1 .tmp_rtic_mp1.c KBUILD_VMLINUX_LIBS=$KBUILD_VMLINUX_LIBS" "$RTIC_MP_O fi fi kallsymso="" kallsymso_prev="" kallsyms_vmlinux="" Loading Loading @@ -363,6 +409,24 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then fi fi if [ -n "${CONFIG_QCOM_RTIC}" ]; then # Update RTIC MP object by replacing the place holder # with actual MP data of the same size # Also double check that object size did not change # Note: Check initilally if RTIC_MP_O is not empty or uninitialized, # as incase RTIC_MPGEN is set and failure occurs in RTIC_MP_O # generation, below check for comparing object sizes fails # due to an empty RTIC_MP_O object. if [ ! -z ${RTIC_MP_O} ]; then rtic_mp "${kallsyms_vmlinux}" rtic_mp.o .tmp_rtic_mp_sz2 \ .tmp_rtic_mp2.c if ! cmp -s .tmp_rtic_mp_sz1 .tmp_rtic_mp_sz2; then echo >&2 'ERROR: RTIC MP object files size mismatch' exit 1 fi fi fi vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o} if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then Loading @@ -383,3 +447,20 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then exit 1 fi fi if [ -n "${CONFIG_QCOM_RTIC}" ]; then # Starting Android Q, the DTB's are part of dtb.img and not part # of the kernel image. RTIC DTS relies on the kernel environment # and could not build outside of the kernel. Generate RTIC DTS after # successful kernel build if MPGen is enabled. The DTB will be # generated with dtb.img in kernel_definitions.mk. if [ ! -z ${RTIC_MPGEN+x} ]; then ${RTIC_MPGEN} --objcopy="${OBJCOPY}" --objdump="${OBJDUMP}" \ --binpath="" --vmlinux="vmlinux" --config=${KCONFIG_CONFIG} \ --cc="${CC} ${KBUILD_AFLAGS}" --dts=rtic_mp.dts \ || echo “RTIC MP DTS generation has failed” # Echo statement above prints the error message in case above # RTIC MP DTS generation command fails and it ensures rtic mp # failure does not cause kernel compilation to fail. fi fi