如何计算要在BitBake中填充的文件大小?

问题描述

我写了一个.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整除的数字上。

  1. 有人可以帮助我实现这一目标吗?
  2. 如何在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_SIZETEE_SIZE_PADDED都是十进制的,而不是十六进制的,但这对于objcopy应该可以正常工作(尽管我现在还没有对其进行测试)。

请注意,您的配方现在取决于在sysroot中安装的bc-native,因此您必须在配方中添加以下内容:

do_install[depends] += "bc-native:do_populate_sysroot"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...