Orange Pi Zero 3 - микрокомпьютер на микропроцессоре Allwinner H618. Orange Pi Zero 3 выпускают с 1Gb, 1.5Gb, 2Gb и 4Gb оперативной памяти. В качестве постоянного запоминающего устройства используется micro SD Flash карта.
Опишем процесс установки операционной системы Linux Debian Bookworm (12) server и desktop на Orange Pi Zero 3.
Установка Debian server на Orange Pi Zero3. Используем файл образа Debian 12 Bookworm server с сайта orangepi.org. Файлы образов можно выбрать на странице этого сайта serviceAndSupport и скачать через Google disk.
Архив с образом необходимо распаковать и проверить на целостность.
sha256sum -c *.sha
Orangepizero3_1.0.4_debian_bookworm_server_linux6.1.31.img: ЦЕЛ
Для записи образа операционной системы на micro SD Flash карту используем программу balenaEtcher. Ссылка для скачивания balenaEtcher. Программу balenaEtcher устанавливать не надо, по ссылке загружается архив программы. Скачиваем, разархивируем и запускаем двойным щелчком. BalenaEtcher работает на Linux, Windows и macOS.
При первом старте сервера происходит подготовка SD карты к использованию.
___ ____ ___ _____ _____ / _ \| _ \_ _| |__ /___ _ __ ___|___ / | | | | |_) | | / // _ \ '__/ _ \ |_ \ | |_| | __/| | / /| __/ | | (_) |__) | \___/|_| |___| /____\___|_| \___/____/ Welcome to Orange Pi 1.0.4 Bookworm with Linux 6.1.31-sun50iw9 System load: 32% Up time: 3 min Local users: 2 Memory usage: 4% of 3.84G IP: 192.168.1.12 CPU temp: 42°C Usage of /: 4% of 58G
Используйте login root или orangepi, пароль orangepi.
Рекомендуется использовать micro SD Flash карту с торговой маркой SanDisk class 10.
Обновите операционную систему.
sudo apt update
sudo apt upgrade -y
Настройки в orangepi-config
Некоторые настройки можно сделать с помощью утилиты orangepi-config
sudo orangepi-config
Утилита orangepi-config предлагает диалоговый режим:
Рис. 1. Orangepi-config.
В разделе Personal настроим часовой пояс, язык системы, раскладку клавиатуры.
Рис. 1. Orangepi-config personal settings.
Добавляем пользователя
groups
orangepi tty disk dialout sudo audio video plugdev games users input netdev docker systemd-journal
Лист. 1.
sudo adduser newuser
Лист. 2.
sudo usermod -a -G orangepi,tty,disk,dialout,sudo,audio,video,plugdev,games,users,netdev,input,docker,systemd-journal newuser
Лист. 3.
Отключаем автоматический вход пользователя orangepi в систему
sudo systemctl disable orangepi-disable-autologin.service
sudo systemctl stop orangepi-disable-autologin.service
Лист. 1. Отключите сервис автовхода Orange Pi
sudo rm /lib/systemd/system/getty@.service.d/override.conf
sudo rm /lib/systemd/system/serial-getty@.service.d/override.conf
Лист. 2. Удаляем проблемные конфигурационные файлы автоматического входа в систему.
sudo cp /lib/systemd/system/getty@.service /etc/systemd/system/getty@.service
Лист. 3. Копируем стандартные настройки Getty
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1
Лист. 4. Перезагружаем системные сервисы.
Удаляем пользователя orangepi
Проверим, с чем связан пользователь orengepi в системе.
sudo systemctl --all | grep orangepi
orangepi-firstrun-config.service loaded inactive dead Orange Pi first run optional user configuration
orangepi-hardware-monitor.service loaded active exited Orange Pi hardware monitoring
orangepi-hardware-optimize.service loaded active exited Orange Pi hardware optimization
orangepi-ramlog.service loaded active exited Orange Pi memory supported logging
orangepi-zram-config.service loaded active exited Orange Pi ZRAM config
● orangepi-hardware-monitor.target not-found inactive dead orangepi-hardware-monitor.target
● orangepi-ramlog.target not-found inactive dead orangepi-ramlog.target
Лист. 1. Пользователь orangepi в службе systemctl.
Мы видим, что слово "orangepi" связано с несколькими системными службами. Но, это просто системные утилиты. Будем удалять пользователя и его домашнюю папку.
sudo userdel -r orangepi
Лист. 2. Удаляем пользователя "orangepi".
Проверяем наличие ошибок в системе.
sudo systemctl list-units --state=failed
UNIT LOAD ACTIVE SUB DESCRIPTION
● smartmontools.service loaded failed failed Self Monitoring and Reporting Technology (SMART) Daemon
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
1 loaded units listed.
Лист. 1. Запуск службы smartmontools.service завершился с ошибкой.
sudo systemctl stop smartmontools.service
Лист. 2. Останавливаем службу smartmontools.service
sudo systemctl disable smartmontools.service
Лист. 3. Запрещаем автозагрузку службы smartmontools.service
sudo systemctl reset-failed smartmontools.service
Лист. 4. Убираем службу smartmontools.service из списка сбоев.
sudo systemctl list-units --state=failed
[sudo] пароль для user:
UNIT LOAD ACTIVE SUB DESCRIPTION
0 loaded units listed.
Лист. 5. Результат.
Наcтроим bash подсказки
grep ^$(whoami) /etc/passwd | cut -d: -f7
/bin/bash
Лист. 1. Настроен командный интерпретатор bash.
Лист. 2.
Установка рабочего стола
sudo apt install xorg lxqt-core sddm openbox obconf lxqt-config --no-install-recommends
Лист. 1. Установка графической подсистемы.
mkdir -p ~/.config/openbox
cp /etc/xdg/openbox/rc.xml ~/.config/openbox/
cp /etc/xdg/openbox/menu.xml ~/.config/openbox/
Лист. 2. Создание файлов минимальной конфигурации OpenBox для пользователя.
Установка программ
sudo apt install firefox-esr
Лист.
#!/bin/bash
# Выходим при любой ошибке (строгий режим)
set -e
# Проверяем, запущен ли скрипт на Raspberry Pi
if grep -q Raspberry /proc/cpuinfo; then
echo "Running on a Raspberry Pi"
else
echo "Not running on a Raspberry Pi. Use at your own risk!"
SKIP_UART=1 # Пропускать настройку UART на не-RPi системах
fi
# Количество ядер для параллельной сборки (make -j)
JNUM=4
# Выходная директория для всех файлов
OUTDIR="$(pwd)/pico"
# Зависимости:
GIT_DEPS="git git-lfs" # Инструменты контроля версий
SDK_DEPS="cmake gcc-arm-none-eabi gcc g++ ninja-build" # Базовый тулчейн
OPENOCD_DEPS="gdb-multiarch automake autoconf build-essential texinfo libtool libftdi-dev libusb-1.0-0-dev libjim-dev pkg-config libgpiod-dev" # Для отладки
VSCODE_DEPS="code" # Редактор кода (не используется)
UART_DEPS="minicom" # Терминал для UART
# Формируем общий список зависимостей
DEPS="$GIT_DEPS $SDK_DEPS"
# Проверяем, нужно ли пропускать установку OpenOCD
if [[ "$SKIP_OPENOCD" == 1 ]]; then
echo "Skipping OpenOCD (debug support)"
else
DEPS="$DEPS $OPENOCD_DEPS" # Добавляем отладочные зависимости
fi
# Установка всех зависимостей
echo "Installing Dependencies"
sudo apt update
sudo apt install -y $DEPS
# Создаем рабочую директорию
echo "Creating $OUTDIR"
mkdir -p $OUTDIR
cd $OUTDIR
# Настройки для клонирования репозиториев
GITHUB_PREFIX="https://github.com/raspberrypi/"
GITHUB_SUFFIX=".git"
SDK_BRANCH="master" # Ветка для SDK
# Клонируем основные репозитории
for REPO in sdk examples extras playground
do
DEST="$OUTDIR/pico-$REPO"
if [ -d $DEST ]; then
echo "$DEST already exists so skipping" # Пропускаем если уже существует
else
# Формируем URL репозитория
REPO_URL="${GITHUB_PREFIX}pico-${REPO}${GITHUB_SUFFIX}"
echo "Cloning $REPO_URL"
git clone -b $SDK_BRANCH $REPO_URL # Клонируем указанную ветку
# Инициализируем подмодули
cd $DEST
git submodule update --init
cd $OUTDIR
# Добавляем переменные окружения в .bashrc
VARNAME="PICO_${REPO^^}_PATH" # Формируем имя переменной (PICO_SDK_PATH и т.д.)
echo "Adding $VARNAME to ~/.bashrc"
echo "export $VARNAME=$DEST" >> ~/.bashrc
export ${VARNAME}=$DEST # Устанавливаем для текущей сессии
fi
done
cd $OUTDIR
# Применяем изменения .bashrc
source ~/.bashrc
# Сборка вспомогательных инструментов
for REPO in picotool debugprobe
do
DEST="$OUTDIR/$REPO"
REPO_URL="${GITHUB_PREFIX}${REPO}${GITHUB_SUFFIX}"
# Для picotool используем специальную ветку
if [[ "$REPO" == "picotool" ]]; then
git clone -b $SDK_BRANCH $REPO_URL
else
git clone $REPO_URL # Обычное клонирование
fi
# Сборка инструментов
cd $DEST
git submodule update --init # Инициализация подмодулей
mkdir build
cd build
cmake ../ # Генерация Makefile
make -j$JNUM # Параллельная сборка
# Установка picotool в систему
if [[ "$REPO" == "picotool" ]]; then
echo "Installing picotool"
sudo make install # Установка системных бинарников
fi
cd $OUTDIR
done
# Сборка примеров для разных платформ
cd pico-examples
for board in pico pico_w pico2 pico2_w # Поддерживаемые платы
do
build_dir=build_$board # Директория для сборки
# Конфигурация CMake для конкретной платы
cmake -S . -B $build_dir -GNinja -DPICO_BOARD=$board -DCMAKE_BUILD_TYPE=Debug
# Примеры для сборки
examples="blink hello_serial hello_usb"
echo "Building $examples for $board"
cmake --build $build_dir --target $examples # Сборка через Ninja
done
cd $OUTDIR
# Проверка необходимости сборки OpenOCD
if [ -d openocd ]; then
echo "openocd already exists so skipping"
SKIP_OPENOCD=1
fi
# Сборка и установка OpenOCD
if [[ "$SKIP_OPENOCD" == 1 ]]; then
echo "Won't build OpenOCD"
else
echo "Building OpenOCD"
cd $OUTDIR
# Параметры конфигурации OpenOCD
OPENOCD_CONFIGURE_ARGS="--enable-ftdi --enable-sysfsgpio --enable-bcm2835gpio --disable-werror --enable-linuxgpiod"
# Клонирование и сборка
git clone "${GITHUB_PREFIX}openocd${GITHUB_SUFFIX}" --depth=1 # Неглубокое клонирование
cd openocd
./bootstrap # Подготовка системы сборки
./configure $OPENOCD_CONFIGURE_ARGS # Конфигурация
make -j$JNUM # Сборка
sudo make install # Установка
fi
cd $OUTDIR
# Настройка UART (только для Raspberry Pi)
if [[ "$SKIP_UART" == 1 ]]; then
echo "Skipping uart configuration"
else
sudo apt install -y $UART_DEPS # Установка minicom
echo "Disabling Linux serial console (UART) so we can use it for pico"
# Настройка UART через raspi-config
sudo raspi-config nonint do_serial_hw 0 # Включение аппаратного UART
sudo raspi-config nonint do_serial_cons 1 # Отключение консоли через UART
echo "You must run sudo reboot to finish UART setup" # Требуется перезагрузка
fi
Лист. скрипт для настройки среды разработки Raspberry Pi Pico на Raspberry Pi.