【问题标题】:How to calculate file size to pad in BitBake?如何计算要在 BitBake 中填充的文件大小?
【发布时间】:2021-02-14 21:02:27
【问题描述】:

我编写了一个.bbappend 文件来填充16-byte alignment 的生成图像。但是我无法在.bbappend 文件中的bashpython 中编写填充逻辑,因为它会引发错误。

这是文件中的片段:

# 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 文件中执行算术运算?

提前致谢。

【问题讨论】:

  • 你得到的错误是什么?
  • 语法错误
  • 我们真的可以有错误的日志吗?这将比试图猜测出了什么问题更有帮助。

标签: python shell yocto bitbake integer-arithmetic


【解决方案1】:

根据我的发现,您不能在使用 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"

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2020-05-18
    • 2021-03-10
    • 1970-01-01
    • 2011-01-12
    • 2013-08-03
    相关资源
    最近更新 更多