Вопрос или проблема
Я использую версию ESP IDF 5.3.
Если я выполняю команду make clean и полную сборку, дата и время сборки обновляются в моем проекте, где я ссылаюсь на DATE и TIME, а также в заголовке бинарного файла проекта.
Но если я не делаю полную сборку, дата и время сборки не обновляются.
Я знаю, какой файл мне нужно “обновить” в МОИХ источниках, чтобы мое приложение всегда получало новую сборку, но заголовок бинарного файла, на который ссылается OTA, не обновляется. Я также подтвердил это с помощью просмотрщика бинарных файлов, см. ниже, начиная с адреса 0000:0000.
e9 05 02 4f b4 55 37 40 ee 00 00 00 09 00 00 00
00 63 00 00 00 00 00 01 20 00 13 3c 1c e3 04 00
32 54 cd ab 00 00 00 00 00 00 00 00 00 00 00 00
31 2e 31 2e 30 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
77 69 6e 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
31 33 3a 31 35 3a 30 30 00 00 00 00 00 00 00 00 33:15:00
53 65 70 20 33 30 20 32 30 32 34 00 00 00 00 00 30 сен 2024
76 35 2e 33 2d 64 69 72 74 79 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Я использую OTA через HTTPS и ссылаюсь на дату и время сборки заголовка бинарного файла, поэтому мне нужно, чтобы это было правильно для управленческих целей.
Я видел статьи, предлагающие обновить файл ../esp/v5.3/esp-idf/components/app_update/esp_ota_app_desc.c, но я не обнаружил, что это как-то изменяет ссылки на дату и время сборки, которые появляются в заголовке или где-либо еще.
Ответ или решение
Чтобы обновить дату и время сборки в заголовке бинарного файла без выполнения make clean
и полной сборки, необходимо выполнить несколько шагов. Это связано с тем, что некоторые метаданные, такие как дата и время сборки, могут не обновляться при инкрементальных сборках. Ниже приведены рекомендации, которые помогут вам обновить эти значения.
Шаги по обновлению даты и времени сборки:
-
Обновление файла конфигурации:
- В вашем проекте обновите конфигурацию, изменив файл, который будет влиять на сборку. Например, вы можете внести незначительные изменения в файл
CMakeLists.txt
или сделать изменения в одном из файлов исходного кода (например, добавив пустую строку или комментарий). Это заставит систему сборки пересобрать необходимые целевые файлы.
- В вашем проекте обновите конфигурацию, изменив файл, который будет влиять на сборку. Например, вы можете внести незначительные изменения в файл
-
Использование команды
touch
:- Хотя вы уже упоминали о том, что знаете, какой файл необходимо «потрогать», чтобы получить новую сборку, рекомендуется также попробовать изменить файл, который непосредственно связан с заголовком. В частности, вы можете использовать команду
touch
для изменения временной метки следующего файла:touch $IDF_PATH/components/app_update/esp_ota_app_desc.c
Это должно инициировать обновление заголовка бинарного файла при следующей сборке.
- Хотя вы уже упоминали о том, что знаете, какой файл необходимо «потрогать», чтобы получить новую сборку, рекомендуется также попробовать изменить файл, который непосредственно связан с заголовком. В частности, вы можете использовать команду
-
Сборка проекта:
- После того как вы измените нужные файлы, выполните команду:
idf.py build
- Эта команда выполнит инкрементальную сборку, которая должна обновить бинарный файл и встроенные метаданные в нем, включая дату и время сборки.
- После того как вы измените нужные файлы, выполните команду:
-
Проверка обновления:
- Проверьте заголовок бинарного файла с помощью бинарного редактора или командой
xxd
:xxd -g 1 <your_binary_file.bin> | head
- Убедитесь, что значения даты и времени обновлены в соответствии с текущей сборкой.
- Проверьте заголовок бинарного файла с помощью бинарного редактора или командой
Дополнительные рекомендации:
- Если указанные советы не сработали, проверьте, что у вас корректно настроена остальная часть проекта и все необходимые компоненты подключены должным образом.
- В случае, если вы активно работаете с OTA, проверьте алгоритм обновления и убедитесь, что у вас настроены правильные параметры для прошивки.
Следуя этим шагам, вы сможете обновить дату и время сборки в заголовке бинарного файла без необходимости выполнять полную сборку проекта.