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

2024-09-30 06:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个.bbappend文件来填充为16-byte alignment生成的图像。但是,我无法在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文件中执行算术运算

提前谢谢


Tags: 文件totargetsizeprefixbinbytetmp
1条回答
网友
1楼 · 发布于 2024-09-30 06:27:45

从我发现的情况来看,在使用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(尽管我现在还没有测试它)

请注意,您的配方现在取决于系统根目录中安装的bc native,因此您必须向配方中添加如下内容:

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

相关问题 更多 >

    热门问题