Инструкция для Linux Mint и macOS. В результате получится одинаковое на обеих системах окружение:
- официальный Raspberry Pi Pico C/C++ SDK;
- компилятор GNU Arm Embedded;
- CMake и Ninja;
- редактор Zed с
clangd, автодополнением и диагностикой; - команды сборки прямо из Zed;
- готовый тестовый проект для Raspberry Pi Pico/Pico W на RP2040;
- создание файла
.uf2и прошивка платы.
Актуальность инструкции: 5 августа 2026 года. Команды рассчитаны на 64-битные Linux Mint и macOS на Intel либо Apple Silicon.
1. Что потребуется #
- плата Raspberry Pi Pico, Pico W или совместимая плата на RP2040;
- USB-кабель с передачей данных;
- доступ в интернет;
- около 2 ГБ свободного места;
- для первой прошивки — доступ к кнопке
BOOTSELна плате.
Используем нативный Pico SDK. Это лучший базовый вариант для USB HID, PIO, многопоточности, отладки и полного доступа к RP2040. Arduino можно добавить позже как отдельный стек.
2. Linux Mint #
2.1. Устанавливаем системные инструменты #
sudo apt update
sudo apt install -y \
git cmake ninja-build build-essential python3 \
gcc-arm-none-eabi libnewlib-arm-none-eabi \
libstdc++-arm-none-eabi-newlib clangd \
libusb-1.0-0-dev pkg-config
Проверяем основные программы:
git --version
cmake --version
ninja --version
arm-none-eabi-gcc --version
clangd --version
python3 --version
2.2. Устанавливаем Zed #
Официальный способ установки:
curl -f https://zed.dev/install.sh | sh
zed --version
Zed для Linux требует 64-битную систему, достаточно современную glibc и видеодрайвер с Vulkan 1.3. Актуальные Linux Mint на базе Ubuntu обычно удовлетворяют этим требованиям.
3. macOS #
3.1. Устанавливаем Command Line Tools и Homebrew #
xcode-select --install
Если Homebrew ещё не установлен, юзаем команду с официального сайта brew.sh. После установки выполняем предложенную Homebrew команду добавления brew в PATH.
3.2. Устанавливаем инструменты для сборки #
brew update
brew install git cmake ninja arm-none-eabi-gcc llvm libusb pkg-config
brew install --cask zed
Homebrew устанавливает clangd вместе с LLVM. Добавляем LLVM в PATH:
echo 'export PATH="$(brew --prefix llvm)/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Чекаем окружение:
git --version
cmake --version
ninja --version
arm-none-eabi-gcc --version
clangd --version
python3 --version
zed --version
Если приложение Zed установлено, но команда zed отсутствует, в Zed юзаем Cmd+Shift+P и запускаем cli: install cli binary.
4. Установка Raspberry Pi Pico SDK #
Следующие команды одинаковы на Linux и macOS:
mkdir -p "$HOME/Developer/raspberry-pi"
cd "$HOME/Developer/raspberry-pi"
git clone --recurse-submodules https://github.com/raspberrypi/pico-sdk.git
git clone --recurse-submodules https://github.com/raspberrypi/pico-examples.git
Ветка master официального репозитория Pico SDK содержит актуальный стабильный SDK. Подмодули обязательны!
Linux Mint: сохранение пути к SDK #
echo 'export PICO_SDK_PATH="$HOME/Developer/raspberry-pi/pico-sdk"' >> ~/.bashrc
source ~/.bashrc
macOS: сохранение пути к SDK #
echo 'export PICO_SDK_PATH="$HOME/Developer/raspberry-pi/pico-sdk"' >> ~/.zshrc
source ~/.zshrc
Проверка:
test -f "$PICO_SDK_PATH/pico_sdk_init.cmake" && echo "Pico SDK найден"
Zed запускает задачи через login shell, поэтому после перезапуска редактора он увидит
PICO_SDK_PATHиз конфигурации оболочки.
5. Проверка SDK сборкой официальных примеров #
cd "$HOME/Developer/raspberry-pi/pico-examples"
cmake -S . -B build -G Ninja -DPICO_BOARD=pico
cmake --build build --parallel
Для Pico W вместо pico используем:
cmake -S . -B build-picow -G Ninja -DPICO_BOARD=pico_w
cmake --build build-picow --parallel
После успешной сборки, например, должен существовать файл:
build/blink/blink.uf2
6. Создаём проект #
mkdir -p "$HOME/Developer/rp2040-starter/src"
mkdir -p "$HOME/Developer/rp2040-starter/.zed"
cd "$HOME/Developer/rp2040-starter"
cp "$PICO_SDK_PATH/external/pico_sdk_import.cmake" .
Получится структура:
rp2040-starter/
├── .zed/
│ ├── settings.json
│ └── tasks.json
├── src/
│ └── main.c
├── CMakeLists.txt
└── pico_sdk_import.cmake
src/main.c #
#include "pico/stdlib.h"
int main(void) {
stdio_init_all();
gpio_init(PICO_DEFAULT_LED_PIN);
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
while (true) {
gpio_put(PICO_DEFAULT_LED_PIN, true);
sleep_ms(500);
gpio_put(PICO_DEFAULT_LED_PIN, false);
sleep_ms(500);
}
}
Этот пример рассчитан на обычный Raspberry Pi Pico. У Pico W встроенный светодиод подключён через Wi-Fi-чип; для первой проверки Pico W удобнее собрать официальный пример
picow_blinkлибо использовать внешний светодиод.
CMakeLists.txt #
cmake_minimum_required(VERSION 3.13)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(pico_sdk_import.cmake)
project(rp2040_starter C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(rp2040_starter
src/main.c
)
target_link_libraries(rp2040_starter
pico_stdlib
)
pico_enable_stdio_usb(rp2040_starter 1)
pico_enable_stdio_uart(rp2040_starter 0)
pico_add_extra_outputs(rp2040_starter)
Строка CMAKE_EXPORT_COMPILE_COMMANDS создаёт базу команд компиляции. По ней clangd понимает заголовки SDK, макросы платы и параметры ARM-компилятора.
7. Настройка Zed #
Zed уже включает поддержку C и C++ и использует clangd. Дополнительное расширение C/C++ устанавливать не нужно.
.zed/settings.json #
{
"languages": {
"C": {
"format_on_save": "on",
"formatter": "language_server",
"tab_size": 4
},
"C++": {
"format_on_save": "on",
"formatter": "language_server",
"tab_size": 4
}
},
"lsp": {
"clangd": {
"binary": {
"arguments": [
"--background-index",
"--clang-tidy",
"--completion-style=detailed"
]
}
}
}
}
.zed/tasks.json #
[
{
"label": "RP2040: configure",
"command": "cmake",
"args": [
"-S", ".",
"-B", "build",
"-G", "Ninja",
"-DPICO_BOARD=pico",
"-DCMAKE_BUILD_TYPE=Debug",
"-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
],
"cwd": "$ZED_WORKTREE_ROOT",
"reveal": "always"
},
{
"label": "RP2040: build",
"command": "cmake",
"args": ["--build", "build", "--parallel"],
"cwd": "$ZED_WORKTREE_ROOT",
"reveal": "always"
},
{
"label": "RP2040: clean",
"command": "cmake",
"args": ["--build", "build", "--target", "clean"],
"cwd": "$ZED_WORKTREE_ROOT",
"reveal": "always"
}
]
Для Pico W в конфигурации:
"-DPICO_BOARD=pico_w"
Открываем проект:
cd "$HOME/Developer/rp2040-starter"
zed .
В Zed:
- Открываем палитру задач:
Cmd+Shift+Rна macOS илиCtrl+Shift+Rна Linux. - Запускаем RP2040: configure.
- Запускаем RP2040: build.
- Чекаем, что создан
build/rp2040_starter.uf2.
После первой конфигурации рестартим language server через палитру команд либо просто перезапускаем Zed. clangd должен автоматически найти build/compile_commands.json.
Если clangd не видит заголовки SDK #
Проверяем:
test -f build/compile_commands.json && echo "compile_commands.json найден"
Если файл существует, но диагностика не обновилась, в корне проекта нужно создать символическую ссылку:
ln -s build/compile_commands.json compile_commands.json
На macOS убеждаемся, что выполняется Homebrew-версия:
which clangd
clangd --version
8. Первая прошивка через BOOTSEL #
Этот способ не требует отладчика или специальных правил USB.
- Отключаем Pico от компьютера.
- Зажмимаем кнопку
BOOTSEL. - Не отпуская кнопку, подключаем USB-кабель.
- Отпускаем
BOOTSEL. - Появится накопитель
RPI-RP2. - Копируем на него
build/rp2040_starter.uf2. - Плата автоматически перезагрузится и запустит программу.
На обычном Pico светодиод должен переключаться каждые 500 мс: полная вспышка длится одну секунду.
Если накопитель не появляется, чаще всего виноват USB-кабель, предназначенный только для зарядки (без шины данных).
9. Удобная прошивка через picotool — необязательно #
picotool позволяет смотреть сведения о прошивке и загружать её без ручного копирования файла. Готовые сборки для Linux и macOS публикуются официальным проектом pico-sdk-tools; также picotool можно собрать из исходников.
На macOS сначала пробуем:
brew install picotool
picotool version
Когда плата находится в режиме BOOTSEL, прошивку можно загрузить так:
picotool load -f -x build/rp2040_starter.uf2
Если команда или пакет недоступны, используем надёжный способ с копированием .uf2 на RPI-RP2.
10. Обновление окружения #
Pico SDK и примеры #
cd "$HOME/Developer/raspberry-pi/pico-sdk"
git pull --ff-only
git submodule update --init --recursive
cd "$HOME/Developer/raspberry-pi/pico-examples"
git pull --ff-only
git submodule update --init --recursive
После обновления SDK рекомендуется пересоздать каталог сборки проекта:
cd "$HOME/Developer/rp2040-starter"
cmake -S . -B build-fresh -G Ninja -DPICO_BOARD=pico -DCMAKE_BUILD_TYPE=Debug
cmake --build build-fresh --parallel
Если новая сборка успешна, старый каталог build можно удалить вручную и снова выполнить конфигурацию из Zed.
Linux Mint #
sudo apt update
sudo apt upgrade
Zed, установленный официальным скриптом, обновляется автоматически.
macOS #
brew update
brew upgrade
brew upgrade --cask zed
12. Итоговая проверка #
Окружение готово, если все пункты выполняются:
arm-none-eabi-gcc --versionпоказывает ARM-компилятор;cmake,ninjaиclangdнаходятся вPATH;- переменная
PICO_SDK_PATHуказывает на каталог Pico SDK; - официальный
pico-examplesсобирается без ошибок; - Zed показывает автодополнение для
pico/stdlib.h; build/compile_commands.jsonсоздан;- задача RP2040: build создаёт
.elf,.bin,.hexи.uf2; - после копирования
.uf2наRPI-RP2программа запускается.

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