问题描述
我写了一个.bbappend
文件来填充16-byte alignment
的生成图像。但是,我无法在bash
文件的python
或.bbappend
文件中编写填充逻辑,因为它会引发错误。
这是文件中的片段:
# Anonymous python function to set the padding size variable
python () {
d.setVar("TEE_SIZE","0xac000")
}
do_deploy () {
install -d ${DEPLOYDIR}
${TARGET_PREFIX}objcopy -O binary ${B}/core/tee.elf ${DEPLOYDIR}/tee_tmp.bin
# Padding for 16 byte alignment
bbnote "Padding to ${TEE_SIZE}"
${TARGET_PREFIX}objcopy -I binary -O binary --pad-to ${TEE_SIZE} --gap-fill=0x0 ${DEPLOYDIR}/tee_tmp.bin ${DEPLOYDIR}/tee.${PLATFORM_FLAVOR}.bin
# Deleting temp TEE,after padding
rm -f ${DEPLOYDIR}/tee_tmp.bin
}
我想获取${DEPLOYDIR}/tee_tmp.bin
的大小并将其填充到下一个可以被0x10
整除的数字上。
- 有人可以帮助我实现这一目标吗?
- 如何在
bitbake
文件中执行算术运算?
谢谢。
解决方法
根据我的发现,您无法在使用Shell语法编写的配方中使用Bash语法编写算术运算。您可以做的就是让应用程序bc执行算术运算。如果我正确理解了您的问题,则可以执行以下操作来计算填充:
# Get the actual size of the file (readlink is only needed if the file might be a symlink)
TEE_SIZE=$(stat --printf="%s" $(readlink -f ${DEPLOYDIR}/tee_tmp.bin))
# Calculate padding
TEE_SIZE_PADDED=$(echo "n = $TEE_SIZE; if(n % 16 != 0) { n += (16 - n % 16)}; n" | bc)
bbnote "Padding to ${TEE_SIZE_PADDED}"
${TARGET_PREFIX}objcopy -I binary -O binary --pad-to ${TEE_SIZE_PADDED} --gap-fill=0 ${DEPLOYDIR}/tee_tmp.bin ${DEPLOYDIR}/tee.${PLATFORM_FLAVOR}.bin
请注意,TEE_SIZE
和TEE_SIZE_PADDED
都是十进制的,而不是十六进制的,但这对于objcopy应该可以正常工作(尽管我现在还没有对其进行测试)。
请注意,您的配方现在取决于在sysroot中安装的bc-native,因此您必须在配方中添加以下内容:
do_install[depends] += "bc-native:do_populate_sysroot"