Техникум: Автоматическое Aрхивирование Aртефактов

от автора

Эскизный проект того, что надо соорудить

Эскизный проект того, что надо соорудить

В программировании микроконтроллеров на электронных платах на выходе всегда получается довольно много артефактов. Это прошивка, документация, отладочная инфа.

По мере возможности всё это добро надо как-то связать и заточить в один архив, чтобы всегда можно было ассоциировать .hex с нужным для него .map и .elf. Также один архив очень удобен при транспортировке программного обеспечения.

Логичным шагом будет являться архивация всех этих файликов в *.tar архив, чтобы всё это не рассыпалось по жесткому диску.

Терминология

Артефакты (Artifact) в контексте программирования микроконтроллеров артефакты — это то полезное, что кристаллизируется на выходе tool chain(а). В самом общем случае это

Расширение

type

Назначение

1

*.hex

text

бинарный образ прошивки в ASCI символах

2

*.bin

bin

Бинарный образ прошивки

3

*.elf

bin

образ с отладочными символами для пошаговой отладки

4

*.map

text

спецификация разметки памяти

5

*.gv

text

граф зависимостей программных компонентов на Graphviz

6

?

?

doxygen документация на ПО

7

*.fw

bin

бинарь прошивки с цифровой подписью

8

прочее

Фактически артефакты — это и есть результат работы программиста микроконтроллера для бизнеса.

Некоторые также называют артефакты словом дистрибутив.

Постановка задачи

Надо реализовать автоматическую архивацию артефактов прошивки. Написать один общий для всех проектов make скрипт для упаковки артефактов. Вмонтировать это действие в общий конвейер сборки любого проекта из репозитория.

Реализация

Для этого можно воспользоваться классической утилитой tar. Это консольная утилита для архивирования файлов. Вот её справка.

tar -h tar(bsdtar): manipulate archive files First option must be a mode specifier:   -c Create  -r Add/Replace  -t List  -u Update  -x Extract Common Options:   -b #  Use # 512-byte records per I/O block   -f <filename>  Location of archive (default \\.\tape0)   -v    Verbose   -w    Interactive Create: tar -c [options] [<file> | <dir> | @<archive> | -C <dir> ]   <file>, <dir>  add these items to archive   -z, -j, -J, --lzma  Compress archive with gzip/bzip2/xz/lzma   --format {ustar|pax|cpio|shar}  Select archive format   --exclude <pattern>  Skip files that match pattern   -C <dir>  Change to <dir> before processing remaining files   @<archive>  Add entries from <archive> to output List: tar -t [options] [<patterns>]   <patterns>  If specified, list only entries that match Extract: tar -x [options] [<patterns>]   <patterns>  If specified, extract only entries that match   -k    Keep (don't overwrite) existing files   -m    Don't restore modification times   -O    Write entries to stdout, don't restore to disk   -p    Restore permissions (including ACLs, owner, file flags) bsdtar 3.5.2 - libarchive 3.5.2 zlib/1.2.5.f-ipp

Нам понадобятся только вот эти опции утилиты tar

ключ

назначение

-?

показать короткую справку по ключам утилиты

-f

путь и имя результирующего файла архива

-v

Активировать логирование. Показать что именно будет заархивированно.

—version

показать версию программы

Префикс после которого через пробел надо перечислить полные пути к тем файлам, которые мы хотим поместить в архив

Надо организовать вот такой конвейер обработки файлов

Для начала поэкспериментируем в windows cmd. Вот этим скриптом в принципе можно решить задачу.

echo off cls  set project_name=boardname_appname_m set project_dir=%cd% set artefact_dir=%project_dir%\build echo project_dir=%project_dir%  set FILES_TO_PACK=%artefact_dir%\%project_name%.map set FILES_TO_PACK=%artefact_dir%\%project_name%.bin %FILES_TO_PACK% set FILES_TO_PACK=%artefact_dir%\%project_name%.elf %FILES_TO_PACK% set FILES_TO_PACK=%artefact_dir%\%project_name%.hex %FILES_TO_PACK% set FILES_TO_PACK=%artefact_dir%\%project_name%.jpeg %FILES_TO_PACK% set FILES_TO_PACK=%artefact_dir%\%project_name%.pdf %FILES_TO_PACK% set FILES_TO_PACK=%artefact_dir%\%project_name%.svg %FILES_TO_PACK% set FILES_TO_PACK=%artefact_dir%\%project_name%_dep.gv %FILES_TO_PACK%  echo artefact_dir=%artefact_dir% echo FILES_TO_PACK=%FILES_TO_PACK%  tar.exe -v -f %artefact_dir%\%project_name%.tar -c %FILES_TO_PACK%  --

Однако система сборки у меня Make поэтому надо написать общий на все сборки скрипт для упаковки файлов. Вот так может выглядеть make скрипт archive_artifacts.mk для упаковки бинарей в архив

$(info ArchiveArtifactsScript)  FILES_TO_PACK += $(BUILD_DIR)/$(TARGET).pdf FILES_TO_PACK += $(BUILD_DIR)/$(TARGET).svg FILES_TO_PACK += $(BUILD_DIR)/$(TARGET).jpeg FILES_TO_PACK += $(BUILD_DIR)/$(TARGET)_dep.gv FILES_TO_PACK += $(BUILD_DIR)/$(TARGET).map FILES_TO_PACK += $(BUILD_DIR)/$(TARGET).elf FILES_TO_PACK += $(BUILD_DIR)/$(TARGET).hex FILES_TO_PACK += $(BUILD_DIR)/$(TARGET).bin  ARCHIVE_FILE :=$(BUILD_DIR)\$(TARGET).tar  .PHONY: archive_artifacts archive_artifacts: generate_dep auto_version_target $(info BUILD_DIR=$(BUILD_DIR)) $(info FILES_TO_PACK=$(FILES_TO_PACK)) $(info ARCHIVE_FILE=$(ARCHIVE_FILE)) $(info Archive Artifacts...) tar.exe -v -f $(ARCHIVE_FILE) -c $(FILES_TO_PACK) -- 

После отработки этого скрипта в папке build (BUILD_DIR) корня проекта появляется *.tar архив с бинарями.

Итоги

Удалось добавить автоматическое архивирование в общий процесс сборки проекта.

Ссылки

#

название

URL

1

Create .zip folder from the command line — (Windows)

https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows

2

TAR — архивирование данных в Windows 10.

https://ab57.ru/cmdlist/tar.html

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Вы делаете автоматическую архивацию артефактов при программировании микроконтроллеров?

40% да2
60% нет3

Проголосовали 5 пользователей. Воздержавшихся нет.

ссылка на оригинал статьи https://habr.com/ru/articles/826730/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *