Найти тему

Компиляция прошивки uf2 для Raspberry Pi Pico W из исходников на Astra Linux CE

Оглавление

Всем привет! 🦝 Сегодня я хочу вам рассказать и показать, как компилировать прошивку для микроконтроллера Raspberry Pi Pico W из исходных кодов на C++. Рассмотрим пошагово как это делается на Astra Linux. И это будет последнее что я делал на Astra Linux.

Для того, чтобы у микроконтроллера была возможность исполнять написанные на плюсах программы, необходимо установить прошивку (загрузчик) для работы с C++.

🖥Подготовка к сборке

Честно сказать приключения начались уже на этапе установки инструментов для сборки. А именно в момент установки компилятора для ARM, того самого gcc-arm-none-eabi. Пришлось даже восстанавливать частично слетевший графический интерфейс Fly.

Для того, чтобы собрать прошивку для Raspberry Pi Pico W на Linux, давайте установим необходимые для этого инструменты. А именно:

sudo apt install cmake build-essential git pkg-config minicom gdb-multiarch automake autoconf texinfo libtool libftdi-dev libusb-1.0-0-dev g++

📌Чтобы наверняка не возникло проблем с зависимостями на этапе установки, рекомендую добавить репозитории Debian. Для других дистрибутивов подобных проблем возникнуть не должно.

После успешной установки инструментов, нужно установить самое важное, а именно компилятор для процессоров на архитектуре ARM. И тут, по традиции, доставайте ваши бубны господа, мы начинаем. Изначально придется вручную обновить glibc. Инструкцию как это можно сделать я нашел у коллеги по цеху (🔗ссылку прикрепляю).

С первого раза обновление получилось не полным, но после повторного выполнения инструкции - библиотеки обновились. Кстати в момент выполнения повторной установки в консоли появиться диалоговое сообщение, в нем необходимо выбрать Yes.

Дальше ещё интереснее, при попытке установить компилятор будут проблемы с тремя зависимостями.

  1. libgmp10
  2. libmpfr6
  3. libmpc3 (Графический интерфейс Fly при установке этого пакета, сделает fly away🛸)

Скачать все библиотеки можно выполнив простой скрипт:

sudo mkdir ~/libs_for_arm_gcc/
cd ~/libs_for_arm_gcc
sudo wget http://ftp.ru.debian.org/debian/pool/main/g/gmp/libgmp10_6.3.0+dfsg-2+b1_amd64.deb
sudo wget http://ftp.ru.debian.org/debian/pool/main/m/mpclib3/libmpc3_1.3.1-1+b2_amd64.deb
sudo wget http://ftp.ru.debian.org/debian/pool/main/m/mpfr4/libmpfr6_4.2.1-1+b1_amd64.deb

Лично я их устанавливал п приведённом выше порядке.

Первая библиотека libgmp10 для работы со знаковыми целыми, рациональными числами и числами с плавающей точкой, установиться без проблем, для неё необходим libc6 версии 2.14 (в Astra Linux CE из коробки 2.24). Со второй библиотекой, для совершения вычислений с плавающей точкой повышенной точности с корректным округлением, у меня особых сложностей не возникло. Основные приключения начнутся в момент установки последней библиотеки, опять же для работы с числами и арифметическими операциями над ними. На этапе установки все пакеты графического интерфейса Fly "улетят". Но сама библиотека установиться. После установки последней библиотеки, графический интерфейс Fly частично удалиться. Но не беда, перезагружаемся прямо в терминале.

sudo reboot

После загрузки системы нас встретит CLI - консольный Linux, грубо говоря. Логинимся в нем и следуем инструкции на сайте (🔗ссылка ниже).

Установка fly-dm (GUI) на Astra Linux

❗️Обязательно сделайте загрузку ОС с GUI по-умолчанию, чтобы не пришлось потом в CLI вручную запускать графический интерфейс. Если что, делается это командой:

startx

Ну что ж, бубны можно пока что отложить. Давайте снова попробуем установить компилятор для ARM.

sudo apt install gcc-arm-none-eabi

И, чудо, он установился.

-2

Давайте теперь приступим к тому. ради чего мы здесь и собрались, а именно к сборке прошивки для Raspberry Pi Pico W.

👨‍💻Загрузка исходников и сборка прошивки

Для начала нем необходимо скачать все необходимые для сборки исходники. Давайте создадим папку и в нее клонируем git кода с прошивкой. Я буду создавать папку в домашней директории, вы делайте где вам нравиться.

mkdir ~/pico && cd ~/pico

Теперь давайте клонируем git кода прошивки для Raspberry Pi Pico W

git clone https://github.com/pico-cs/firmware

Далее для сборки на потребуются SDK для Raspberry Pi Pico, также клонируем их git.

git clone https://github.com/raspberrypi/pico-sdk

Git от SDK для Pico содержит в себе подмодули, ссылки на другие репозитории, давайте их тоже подтянем в папку с SDK. Для этого переходим c SDK и выполняем следующую команду (: процесс будет довольно долгим, наберитесь терпения :)

git submodule update --init

После подтягивания всех дополнительных репозиториев, необходимо в переменные окружения добавить следующую переменную PICO_SDK_PATH в которой будет храниться путь к папке с SDK для Pico

export PICO_SDK_PATH=~/pico/pico-sdk
export PICO_TOOLCHAIN_PATH=/usr/bin

Далее переходим в папку с исходными кодами прошивки и создадим в ней папку build и сразу же перейдем в нее. Все эти три действия можно записать в одной простой команде.

cd ~/pico/firmware/src && mkdir build && cd build

Теперь давайте сконфигурируем сборку следующей командой

cmake .. -DPICO_BOARD=pico_w -DPICO_CS_WIFI_SSID=test -DPICO_CS_WIFI_PASSWORD=1234567890

Что означают все эти атрибуты в команде конфигурирования сборки:

  • PICO_BOARD - тип платы, которая будет использоваться при сборке;
  • PICO_CS_WIFI_SSID - параметр определяет SSID (Service Set Identifier) для беспроводной сети Wi-Fi;
  • PICO_CS_WIFI_PASSWORD - пароль для указанной Wi-Fi сети.

📌Я указал данные не существующей сети, так как мне и не нужно чтобы плата подключалась к WiFi. Моя задача заключалась в том, чтобы самому собрать прошивку и сделать так, чтобы плата работала с Arduino IDE.

После конфигурации, можно приступать к сборке проекта, для этого выполним команду:

make -j 5
Сборка прошла успешно
Сборка прошла успешно

По окончанию процесса сборки в папки build появиться файл cs_w.uf2 это и есть файл прошивки. Вот мы и собрали прошивку для для Raspberry Pi Pico W на Astra Linux CE. Как собирать прошивки в других ОС я опишу в своих следующих статьях.

-4

Это скорее всего будет последнее, что я делал на Astra Linux CE, так как постоянно испытывать трудности из-за старой пакетной базы я устал. Мы перейдем на не менее интересный дистрибутив - Arch Linux.

Спасибо за прочтение! Удачных сборок! 🦝

-5