Конфигурирование PL с помощью Makefile — различия между версиями

Материал из SRNS
Перейти к: навигация, поиск
(С чего начать?)
(Примеры использования)
 
(не показаны 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, доступ к которому осуществляется по токену.

Итого, для успешного выполнения задачи проводятся следущие действия:

  1. Получение списка последних job'ов.
  2. Поиск последнего успешного job'а.
  3. Скачивание артефактов.
  4. Распаковка архива и копирование bit-файла на плату.
  5. Прошивка ПЛИС

[править] С чего начать?

Прежде всего необходимо получить токен Gitlab API. Для этого заходим на вебморду Gitlab в раздел выдачи токенов, ткнув по ссылке: Access Tokens.

2021 09 27 api token.png

  1. Даем имя токену, срок его действия и галочку на api.
  2. Нажимаем на кнопку "Создать токен".
  3. Копируем токен куда-нибудь, в вебморде он больше отображаться не будет.
  4. Вставляем токен в personal.conf (токен имеет вид ряда случайных символов, например eB8raLLzs-LqS-qXmRxU)
 GITLAB_TOKEN ?= put_your_Gitlab_token_here

Готово!

[править] Синтаксис

В общем случае:

 make cd_pl BRANCH=<branch_name> PLJOB=<job_name> PLARTIFACTSDIR=<path_to_dest> PLARTIFACTSFILE=<art_filename> PLARTIFACTBITFILEPATH=<archive_path> PLARTIFACTBITFILE=<bitname>

Если аргументы не указаны, то выбираются параметры по умолчанию:

PLJOB                 ?= is_PL_compilable_max
BRANCH                ?= develop
PLARTIFACTSDIR        ?= /tmp/develop_artifacts
PLARTIFACTSFILE       ?= artifacts.zip
PLARTIFACTBITFILEPATH ?= qa/built
PLARTIFACTBITFILE     ?= clonicus.bit

[править] Примеры использования

Прошиваться будет тот девайс, который указан в personal.conf!

  • Хочу битник с кучей каналов из девелопа (даст прошивку с дефайном build_max сваренную ночью).
 make cd_pl
  • Хочу битник номадикуса с кучей каналов из девелопа.
 make cd_pl PLJOB=is_PL_nomadicus_compilable_max PLARTIFACTBITFILE=nomadicus.bit

или

 make cd_pl_nomadicus
  • Хочу битник с кучей каналов из ветки test.
 make cd_pl BRANCH=test
  • Хочу битник напопробовать из ветки test.
 make cd_pl BRANCH=test PLJOB=is_PL_compilable

[править] Выводимая информация

При успешном выполнении отобразится информация о коммите, из которого сварена прошивка, статус копирования на плату и т.п.

2021 09 27 good result.png

[править] Возможные проблемы

1.Старая ветка

  • Работа указанной фичи основана на python-скрипте с стандартным пакетом модулей, проверено на python 3.8, 3.9.
  • Если поднимать древнюю ветку, то возможно не найти job, т.к. в скрипте qa/getartifacts.py список job'ов (всех, в т.ч. не для PL) ограничен последними 5000 job'ами, выдает такое:

2021 09 27 notfound.png

Поправить можно в этом месте (qa/getartifacts.py) увеличив max_pagenum:

2021 09 27 getartifacts limitation.png


2.Некорректный токен

  • Выдает такое:

2021 09 27 token err.png

  • Решение:

Удостовериться, что токен в 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
Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты