Всем привет! 🦝 Сегодня я хочу вам рассказать и показать, как компилировать прошивку для микроконтроллера 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.
Дальше ещё интереснее, при попытке установить компилятор будут проблемы с тремя зависимостями.
- libgmp10
- libmpfr6
- 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, грубо говоря. Логинимся в нем и следуем инструкции на сайте (🔗ссылка ниже).
❗️Обязательно сделайте загрузку ОС с GUI по-умолчанию, чтобы не пришлось потом в CLI вручную запускать графический интерфейс. Если что, делается это командой:
startx
Ну что ж, бубны можно пока что отложить. Давайте снова попробуем установить компилятор для ARM.
sudo apt install gcc-arm-none-eabi
И, чудо, он установился.
Давайте теперь приступим к тому. ради чего мы здесь и собрались, а именно к сборке прошивки для 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. Как собирать прошивки в других ОС я опишу в своих следующих статьях.
Это скорее всего будет последнее, что я делал на Astra Linux CE, так как постоянно испытывать трудности из-за старой пакетной базы я устал. Мы перейдем на не менее интересный дистрибутив - Arch Linux.