Конфигурирование PL с помощью Makefile — различия между версиями
Ustinov (обсуждение | вклад) (→С чего начать?) |
Ustinov (обсуждение | вклад) (→Примеры использования) |
||
(не показаны 6 промежуточных версий 2 участников) | |||
Строка 3: | Строка 3: | ||
== Как это работает? == | == Как это работает? == | ||
− | Gitlab сервер содержит в себе сервис CI/CD, в котором назначены job'ы сборки прошивки ПЛИС при получении нового коммита и/или по расписанию. На сегодняшний день таких job'ов существует | + | Gitlab сервер содержит в себе сервис CI/CD, в котором назначены job'ы сборки прошивки ПЛИС при получении нового коммита и/или по расписанию. На сегодняшний день таких job'ов существует 4: |
*is_PL_compilable - стратегия сборки прошивки с минимальным количеством модулей ("напопробовать"). | *is_PL_compilable - стратегия сборки прошивки с минимальным количеством модулей ("напопробовать"). | ||
*is_PL_compilable_max - стратегия сборки прошивки с некоторым рабочим количеством модулей ("ничетак") | *is_PL_compilable_max - стратегия сборки прошивки с некоторым рабочим количеством модулей ("ничетак") | ||
+ | *is_PL_nomadicus_compilable - стратегия сборки прошивки nomadicus с минимальным количеством модулей ("напопробовать"). | ||
+ | *is_PL_nomadicus_compilable_max - стратегия сборки прошивки nomadicus с некоторым рабочим количеством модулей ("ничетак") | ||
В результате успешного выполнения job'а формируются артефакты (artifacts), в которых, в частности, лежит bit-файл прошивки ПЛИС. | В результате успешного выполнения job'а формируются артефакты (artifacts), в которых, в частности, лежит bit-файл прошивки ПЛИС. | ||
Строка 26: | Строка 28: | ||
[[File:2021_09_27_api_token.png|800px]] | [[File:2021_09_27_api_token.png|800px]] | ||
− | # Даем имя токену, срок его действия и галочку на api. | + | # Даем имя токену, срок его действия и галочку на '''api'''. |
# Нажимаем на кнопку "Создать токен". | # Нажимаем на кнопку "Создать токен". | ||
# '''Копируем токен куда-нибудь, в вебморде он больше отображаться не будет'''. | # '''Копируем токен куда-нибудь, в вебморде он больше отображаться не будет'''. | ||
Строка 54: | Строка 56: | ||
'''Прошиваться будет тот девайс, который указан в personal.conf!''' | '''Прошиваться будет тот девайс, который указан в personal.conf!''' | ||
− | * Хочу битник с кучей каналов из девелопа. | + | * Хочу битник с кучей каналов из девелопа (даст прошивку с дефайном build_max сваренную ночью). |
<source lang="bash"> make cd_pl </source> | <source lang="bash"> make cd_pl </source> | ||
+ | |||
+ | * Хочу битник номадикуса с кучей каналов из девелопа. | ||
+ | <source lang="bash"> make cd_pl PLJOB=is_PL_nomadicus_compilable_max PLARTIFACTBITFILE=nomadicus.bit</source> | ||
+ | |||
+ | или | ||
+ | |||
+ | <source lang="bash"> make cd_pl_nomadicus</source> | ||
* Хочу битник с кучей каналов из ветки test. | * Хочу битник с кучей каналов из ветки test. | ||
Строка 64: | Строка 73: | ||
== Выводимая информация == | == Выводимая информация == | ||
− | При успешном выполнении | + | При успешном выполнении отобразится информация о коммите, из которого сварена прошивка, статус копирования на плату и т.п. |
[[File:2021_09_27_good_result.png|800px]] | [[File:2021_09_27_good_result.png|800px]] | ||
== Возможные проблемы == | == Возможные проблемы == | ||
+ | 1.'''Старая ветка''' | ||
*Работа указанной фичи основана на python-скрипте с стандартным пакетом модулей, проверено на python 3.8, 3.9. | *Работа указанной фичи основана на python-скрипте с стандартным пакетом модулей, проверено на python 3.8, 3.9. | ||
− | *Если поднимать древнюю ветку, то возможно не найти job, т.к. в скрипте qa/getartifacts.py список job'ов (всех, в т.ч. не для PL) ограничен последними 5000 job'ами: | + | *Если поднимать древнюю ветку, то возможно не найти job, т.к. в скрипте qa/getartifacts.py список job'ов (всех, в т.ч. не для PL) ограничен последними 5000 job'ами, выдает такое: |
[[File:2021_09_27_notfound.png|800px]] | [[File:2021_09_27_notfound.png|800px]] | ||
Строка 79: | Строка 89: | ||
[[File:2021_09_27_getartifacts_limitation.png|200px]] | [[File:2021_09_27_getartifacts_limitation.png|200px]] | ||
− | |||
+ | 2.'''Некорректный токен''' | ||
+ | |||
+ | * Выдает такое: | ||
[[File:2021_09_27_token_err.png|800px]] | [[File:2021_09_27_token_err.png|800px]] | ||
+ | |||
+ | *Решение: | ||
+ | Удостовериться, что токен в personal.conf соответствует токену на сервере. | ||
+ | |||
+ | |||
+ | 3. '''Сертификат''' | ||
+ | *Не работает получение прошивок с сервера cd_find_dload_bitstream, cd_pl, cd_pl_nomadicus, потому что не может проверить сертификат | ||
+ | * Выдает такое: | ||
+ | (<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>). | ||
+ | |||
+ | *Решение: | ||
+ | |||
+ | $ sudo update-ca-certificates --fresh | ||
+ | $ export SSL_CERT_DIR=/etc/ssl/certs | ||
[[Category:HOWTO]] | [[Category:HOWTO]] |
Текущая версия на 14:58, 19 июня 2023
Makefile проекта src содержит в себе цель cd_pl, задача которой найти последний успешно собранный bit-файл прошивки ПЛИС для заданной ветки с заданной стратегией сборки и прошить плату.
Содержание |
[править] Как это работает?
Gitlab сервер содержит в себе сервис CI/CD, в котором назначены job'ы сборки прошивки ПЛИС при получении нового коммита и/или по расписанию. На сегодняшний день таких job'ов существует 4:
- is_PL_compilable - стратегия сборки прошивки с минимальным количеством модулей ("напопробовать").
- is_PL_compilable_max - стратегия сборки прошивки с некоторым рабочим количеством модулей ("ничетак")
- is_PL_nomadicus_compilable - стратегия сборки прошивки nomadicus с минимальным количеством модулей ("напопробовать").
- is_PL_nomadicus_compilable_max - стратегия сборки прошивки nomadicus с некоторым рабочим количеством модулей ("ничетак")
В результате успешного выполнения job'а формируются артефакты (artifacts), в которых, в частности, лежит bit-файл прошивки ПЛИС.
Получение артефактов возможно при помощи Gitlab API, доступ к которому осуществляется по токену.
Итого, для успешного выполнения задачи проводятся следущие действия:
- Получение списка последних job'ов.
- Поиск последнего успешного job'а.
- Скачивание артефактов.
- Распаковка архива и копирование bit-файла на плату.
- Прошивка ПЛИС
[править] С чего начать?
Прежде всего необходимо получить токен Gitlab API. Для этого заходим на вебморду Gitlab в раздел выдачи токенов, ткнув по ссылке: Access Tokens.
- Даем имя токену, срок его действия и галочку на api.
- Нажимаем на кнопку "Создать токен".
- Копируем токен куда-нибудь, в вебморде он больше отображаться не будет.
- Вставляем токен в personal.conf (токен имеет вид ряда случайных символов, например eB8raLLzs-LqS-qXmRxU)
Готово!
[править] Синтаксис
В общем случае:
Если аргументы не указаны, то выбираются параметры по умолчанию:
BRANCH ?= develop
PLARTIFACTSDIR ?= /tmp/develop_artifacts
PLARTIFACTSFILE ?= artifacts.zip
PLARTIFACTBITFILEPATH ?= qa/built
PLARTIFACTBITFILE ?= clonicus.bit
[править] Примеры использования
Прошиваться будет тот девайс, который указан в personal.conf!
- Хочу битник с кучей каналов из девелопа (даст прошивку с дефайном build_max сваренную ночью).
- Хочу битник номадикуса с кучей каналов из девелопа.
или
- Хочу битник с кучей каналов из ветки test.
- Хочу битник напопробовать из ветки test.
[править] Выводимая информация
При успешном выполнении отобразится информация о коммите, из которого сварена прошивка, статус копирования на плату и т.п.
[править] Возможные проблемы
1.Старая ветка
- Работа указанной фичи основана на python-скрипте с стандартным пакетом модулей, проверено на python 3.8, 3.9.
- Если поднимать древнюю ветку, то возможно не найти job, т.к. в скрипте qa/getartifacts.py список job'ов (всех, в т.ч. не для PL) ограничен последними 5000 job'ами, выдает такое:
Поправить можно в этом месте (qa/getartifacts.py) увеличив max_pagenum:
2.Некорректный токен
- Выдает такое:
- Решение:
Удостовериться, что токен в personal.conf соответствует токену на сервере.
3. Сертификат
- Не работает получение прошивок с сервера cd_find_dload_bitstream, cd_pl, cd_pl_nomadicus, потому что не может проверить сертификат
- Выдает такое:
(<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>).
- Решение:
$ sudo update-ca-certificates --fresh $ export SSL_CERT_DIR=/etc/ssl/certs