Загрузка данных


if(CONFIG_BUILD_OUTPUT_ADJUST_LMA)
  math(EXPR adjustment "${CONFIG_BUILD_OUTPUT_ADJUST_LMA}" OUTPUT_FORMAT DECIMAL)
  
  # 1. Текст вашего интеллектуального алгоритма фильтрации секций 0x8
  set(RAW_PY_CODE "import sys, subprocess
elf, adj, bin_obj = sys.argv[1], sys.argv[2], sys.argv[3]
res = subprocess.run(['arm-zephyr-eabi-readelf', '-S', elf], capture_output=True, text=True)
lines = [l.split() for l in res.stdout.splitlines() if len(l.split()) >= 4]
secs = [p[1].replace('[','').replace(']','') for p in lines if p[2].startswith('8') and 'bss' not in p[1] and 'noinit' not in p[1]]
args = []
for s in secs: args.extend(['--change-section-lma', f'{s}+{adj}'])
if args: subprocess.run([bin_obj] + args + [elf, elf], check=True)
")

  # 2. Кодируем скрипт в HEX
  string(HEX "${RAW_PY_CODE}" HEX_CODE)
  
  # 3. Формируем команду, которая передает HEX-текст через конвейер echo | python3 -
  # В ней нет ни одной скобки наружу, Bash увидит только плоские буквенно-цифровые символы
  list(APPEND
    post_build_commands
    COMMAND ${CMAKE_COMMAND} -E echo "import sys; exec(bytes.fromhex('${HEX_CODE}').decode('utf-8'))"
            | ${PYTHON_EXECUTABLE} -
            ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} 
            ${adjustment}
            $<TARGET_PROPERTY:bintools,elfconvert_command>
    )
endif()