Добавить в корзинуПозвонить
Найти в Дзене
Мищук Андрей.

Памятка по сборке PetaLinux (2025.2) для Alinx AC7020C на базе Zynq 7020

Следуя нижеописанным шагам, вы получите полностью рабочую сборку PetaLinux 2025.2 для платы Alinx AC7020C на базе Zynq 7020 с настроенным SPI1, корректным часовым поясом, автовходом в систему и поддержкой SD-карты в качестве корневой файловой системы. Встроенный Ethernet-контроллер Zynq 7020 (GEM0 / GEM1) автоматически настраивается драйвером macb при загрузке системы и получает IP-адрес динамически (по DHCP). Проектирование и сборка встраиваемых операционных систем Linux на базе архитектур AMD Zynq-7000, Zynq UltraScale+ и Versal с помощью инструментария PetaLinux требует строгого соблюдения системных требований к операционной системе хоста. Для обеспечения максимальной стабильности, предсказуемости и лучшей совместимости компонентов Yocto Project компания AMD рекомендует использовать в качестве базовой ОС дистрибутив Ubuntu 22.04 LTS. Если основной рабочей станцией инженера является ПК под управлением Windows 10/11, вынужденной и при этом полностью оправданной мерой становится прим
Оглавление

Введение

Следуя нижеописанным шагам, вы получите полностью рабочую сборку PetaLinux 2025.2 для платы Alinx AC7020C на базе Zynq 7020 с настроенным SPI1, корректным часовым поясом, автовходом в систему и поддержкой SD-карты в качестве корневой файловой системы.

Встроенный Ethernet-контроллер Zynq 7020 (GEM0 / GEM1) автоматически настраивается драйвером macb при загрузке системы и получает IP-адрес динамически (по DHCP).

Проектирование и сборка встраиваемых операционных систем Linux на базе архитектур AMD Zynq-7000, Zynq UltraScale+ и Versal с помощью инструментария PetaLinux требует строгого соблюдения системных требований к операционной системе хоста.

Для обеспечения максимальной стабильности, предсказуемости и лучшей совместимости компонентов Yocto Project компания AMD рекомендует использовать в качестве базовой ОС дистрибутив Ubuntu 22.04 LTS. Если основной рабочей станцией инженера является ПК под управлением Windows 10/11, вынужденной и при этом полностью оправданной мерой становится применение технологий виртуализации. В рамках подготовки данного материала были всесторонне протестированы следующие платформы:

  • Oracle VirtualBox (полноценная виртуальная машина);
  • Docker (изолированные Linux-контейнеры);
  • WSL2 (подсистема Windows для Linux).

В каждой из перечисленных сред дистрибутив Ubuntu 22.04 показал стопроцентную стабильность, а финальная сборка образа Linux завершилась успешно.

Архитектура экосистемы PetaLinux и компилятора BitBake жестко контролирует права доступа: все действия по конфигурации и сборке проекта категорически запрещено выполнять под учетной записью root. Сборка в режиме суперпользователя будет мгновенно заблокирована системой.

Для работы в системе был создан стандартный бесправный пользователь с именем petalinux. Все проекты, исходные коды и файлы аппаратного описания (.xsa) изолированы и размещаются строго в его домашней директории по пути:


📂 /home/petalinux/petalinux_projects/

Шаг 1. Конфигурация локали системы (Locale)

Перед установкой пакетов необходимо решить скрытую, но критическую проблему, с которой сталкиваются пользователи виртуальных сред — некорректную настройку языковых стандартов. Если локаль системы повреждена или не настроена, утилиты конфигурации menuconfig и внутренние скрипты AMD будут аварийно завершать работу.

Выполните принудительную генерацию и фиксацию системной локали en_US.UTF-8:

sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8


# Экспортируем переменные в текущую сессию терминала

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Чтобы проверить, что настройки применились, введите команду locale. В выводе терминала напротив каждого параметра должно быть жестко прописано "en_US.UTF-8".

Шаг 2. Установка системных зависимостей и библиотек.

Современный установщик PetaLinux 2025.2 требует наличия как актуальных инструментов компиляции, так и старых библиотек обратной совместимости, включая 32-битные пакеты архитектуры i386.

Обратите внимание, что в современных репозиториях пакет libsdl1.2-dev признан устаревшим, поэтому вместо него используется актуальный libsdl1.2-compat-dev.

Добавляем поддержку 32-битной архитектуры i386:

sudo dpkg --add-architecture i386
sudo apt update

Для работы графических и текстовых утилит AMD (таких как XSCT) критически важен пакет libtinfo5.

sudo apt install -y libtinfo5 libtinfo5:i386

Устанавливаем официальный массив пакетов для PetaLinux 2025.2:

sudo apt install -y iproute2 gawk make net-tools libncurses5-dev tftpd zlib1g:i386 libssl-dev flex bison libselinux1 xterm autoconf libtool tar unzip texinfo gcc-multilib build-essential libsdl1.2-compat-dev libglib2.0-dev screen pax gzip cpio python3 python3-pip python3-setuptools python3-pexpect xinetd python3-git python3-jinja2 pylint debianutils iputils-ping socat diffstat chrpath rsync xz-utils libegl1-mesa libgstreamer1.0-0 vim

Дополнительные Python-пакеты (для корректной работы скриптов AMD):

pip3 install --user pyelftools

Шаг 3. Подготовка целевой директории установки

Инструментарий PetaLinux традиционно разворачивается в системный каталог /opt/. Однако, помня о главном правиле безопасности Yocto, сам инсталлятор ни в коем случае нельзя запускать через sudo.

Чтобы совместить требования иерархии файловой системы Linux и ограничения установщика, применяется классическая практика: директория создается с правами суперпользователя, но её владельцем назначается текущий бесправный пользователь petalinux.

Выполните подготовку путей следующими командами:

sudo mkdir -p /opt/petalinux/2025.2/
sudo chown -R petalinux:petalinux /opt/petalinux/

Шаг 4. Запуск инсталлятора PetaLinux 2025.2

Предполагается, что официальный тяжеловесный файл установщика petalinux-v2025.2-final-installer.run уже скачан с сайта AMD/Xilinx.

Важное примечание для пользователей виртуальных платформ и WSL2: Если вы используете общие папки хост-системы Windows (например, /mnt/c/...), обязательно скопируйте файл инсталлятора внутрь домашней директории Linux (в /home/petalinux/). Запуск установки напрямую из смонтированных дисков Windows может снизить скорость распаковки в десятки раз или привести к ошибкам прав доступа.

Перейдите в каталог с инсталлятором и запустите процесс:

chmod +x petalinux-v2025.2-final-installer.run
./petalinux-v2025.2-final-installer.run -d /opt/petalinux/2025.2/

В процессе распаковки инсталлятор временно перейдет в режим отображения лицензионных соглашений (End User License Agreement):

  1. Используйте клавишу Пробел (Space) для быстрого постраничного пролистывания текста соглашений, а не Enter, чтобы не листать документ построчно.
  2. Скрипт трижды остановится и потребует подтверждения. Каждый раз вводите символ y и нажимайте Enter, соглашаясь с условиями.

По завершении процесса утилиты будут полностью развернуты в целевую папку.

Шаг 5. Настройка рабочего окружения хоста

Чтобы сделать исполняемые файлы компиляторов и утилит PetaLinux видимыми для операционной системы, необходимо инициализировать переменные окружения. Для этого AMD предоставляет готовый скрипт settings.sh.

Разовый вызов для текущей сессии терминала выглядит так:

source /opt/petalinux/2025.2/settings.sh

Создание постоянного псевдонима (Alias) вместо автозапуска

Многие разработчики добавляют команду source напрямую в конец конфигурационного файла ~/.bashrc, чтобы среда активировалась автоматически при каждом открытии консоли. Для PetaLinux это плохая практика. Тулчейн AMD содержит собственную изолированную среду Python, которая при автоматическом импорте подменит системный Python дистрибутива Ubuntu. Профессиональным решением является создание изолированного псевдонима (alias). Запишите его в свой профиль:

echo "alias cdt='source /opt/petalinux/2025.2/settings.sh'" >> ~/.bashrc

Теперь, открыв терминал, когда вам потребуется начать работу с проектом AMD Zynq, достаточно ввести короткую команду: cdt

Шаг 6. Создание проекта, импорт аппаратной платформы и конфигурация SPI

Когда инструментарий полностью развёрнут, а рабочее окружение активировано, можно переходить к созданию базового образа операционной системы для платы Alinx AC7020C (чип Zynq-7000).

Выполните в терминале хоста последовательную цепочку команд под пользователем petalinux:

# 1. Переходим в изолированную папку проектов
cd /home/petalinux/petalinux_projects/

# 2. Создаем проект на базе универсального шаблона для чипов Zynq
petalinux-create --type project --template zynq --name ac7020c_alinx

# 3. Переходим в директорию созданного проекта
cd ac7020c_alinx

Критически важный шаг: Перед запуском инициализации проекта скопируйте сгенерированный в Vivado 2025.2 файл аппаратного описания system_wrapper.xsa напрямую в корень созданной директории /home/petalinux/petalinux_projects/ac7020c_alinx/.

После того как файл физически размещен в корне проекта, запустите команду импорта «железа», указав текущую папку в качестве источника:

petalinux-config --get-hw-description=.

Скрипт автоматически запустит парсинг аппаратных регистров файла .xsa и начнет фоновую сборку конфигуратора. Через некоторое время откроется текстовое графическое меню настроек (System Configuration).

На данном этапе для базового запуска платы Alinx достаточно сохранить настройки по умолчанию, выбрав на нижней панели пункт <Save> (нажмите Enter для подтверждения записи в файл .config), после чего полностью выйти из конфигуратора через пункт <Exit>.

-2

По умолчанию PetaLinux настраивает проект так, что корень файловой системы (RootFS) при старте платы будет разворачиваться и полностью размещаться в оперативной памяти (режим INITRAMFS). Это удобно для быстрых тестов, но любые изменения внутри ОС (установка пакетов, сохранение файлов) будут бесследно исчезать после перезагрузки платы Alinx.

Переключение корневой файловой системы на SD-карту

Если вам необходимо разместить полноценную корневую систему на втором разделе (EXT4) вашей SD-карты, выполните переключение прямо в открывшемся меню:

Перейдите в раздел Image Packaging Configuration.

  1. Найдите пункт Root filesystem type и зайдите в него (нажмите Enter).
  2. Измените значение с дефолтного INITRAMFS на EXT4 (SD/eMMC/QSPI) и одтвердите выбор.
-3

  1. Выйдите обратно в главное меню.
  2. Зайдите в раздел Subsystem AUTO Hardware SettingsAdvanced bootable images storage settingsboot image settings.
  3. Убедитесь, что в пункте image storage media выставлено значение primary sd (это укажет загрузчику U-Boot искать ядро и RootFS на карте).

На нижней панели выберите пункт <Save> (нажмите Enter для подтверждения записи конфигурации в файл по умолчанию .config), после чего полностью выйдите из конфигуратора через пункт <Exit>.

Автоматический вход в систему (без пароля)

тобы консоль последовательного порта (UART/COM-порт) платы Alinx загружалась сразу в командную строку root@ac7020calinx:~# без требования ввода логина и пароля, необходимо выполнить две настройки в конфигураторе файловой системы.

Первая настройка отключает проверку пароля для отладочных интерфейсов. Вторая настройка — sysvinit-inittab-autologin (несмотря на название, она работает и для systemd, и для sysvinit) — включает автоматический вход в систему на последовательной консоли.

Запустите конфигуратор файловой системы:

petalinux-config -c rootfs

В открывшемся текстовом графическом меню настроек выполните следующие шаги:

-4

1. Выбор системы инициализации Init Manager:

  • Перейдите в раздел Image Features (нажмите Enter) — здесь находится настройка Init Manager.
  • Найдите пункт Init Manager (или Init system).
  • Убедитесь, что выбрано значение systemd.

2. Отключение проверки пароля (debug-tweaks):

  • Оставаясь в разделе Image Features, найдите пункт debug-tweaks.
  • Убедитесь, что на пункте debug-tweaks стоит звездочка [*]. Если её нет, нажмите Пробел, чтобы активировать.

Настройка синхронизации времени (NTP) и временной зоны (Москва)

По умолчанию утилиты работы со временем и текстовые редакторы скрыты из графического конфигуратора PetaLinux. Чтобы они появились в меню, их необходимо принудительно зарегистрировать в файле пользовательских пакетов проекта.

Откройте конфигурационный файл в терминале:

nano project-spec/meta-user/conf/user-rootfsconfig

Допишите в конец файла имена необходимых пакетов времени и системного редактора nano строго в следующем виде (по одному пакету на строку):

CONFIG_ntp
CONFIG_ntp-tickadj
CONFIG_nano

-5

(Сохраните изменения: Ctrl + O → Enter → Ctrl + X).

Теперь, когда пакеты успешно зарегистрированы, запустите конфигуратор файловой системы:

petalinux-config -c rootfs

В открывшемся синем меню перейдите в самый нижний раздел: User Packages (он создается специально для пакетов, прописанных в user-rootfsconfig).

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

  • [*] nano
  • [*] ntp
  • [*] ntp-tickadj

Чтобы Yocto при сборке сам назначил московское время по умолчанию, не выходя из графического меню, выполните следующее:

  1. Вернитесь в главное меню RootFS и перейдите по честному пути: Filesystem Packagesbasetzdata. (После активации в User Packages этот раздел станет доступен).
  2. Найдите там строку tzdata-core-timezone (в некоторых версиях DEFAULT_TIMEZONE).
  3. Нажмите Enter и в открывшемся текстовом окне вручную введите точный путь к часовому поясу:
-6

Чтобы сборщик Yocto при компиляции дистрибутива гарантированно применил московский часовой пояс и сам создал все необходимые системные ссылки, зафиксируйте переменную часового пояса в глобальных настройках сборки «железа».

Откройте конфигурационный файл BSP вашего проекта:

nano project-spec/meta-user/conf/petalinuxbsp.conf

Добавьте в самый конец файла следующую строку, принудительно переопределяющую системную зону:

DEFAULT_TIMEZONE:forcevariable = "Europe/Moscow"

-7

Конфигурация подсистемы SPI1 (MIO 10-13)

В рассматриваемой конфигурации платы Alinx задействован жесткий процессорный интерфейс SPI1, выведенный на разъём расширения через выводы MIO 10-13 (без использования логики EMIO/FPGA). Любые попытки ручной перестройки блоков pinctrl0 или внедрения программного GPIO-управления (cs-gpios) в версии PetaLinux 2025.2 являются полностью неработоспособными. Они вызывают внутренний конфликт ядра Device or resource busy, из-за чего файл устройства /dev/spidev вообще пропадает из системы, а линия CS0 намертво зависает в высоком состоянии (+3.3V).

Для реализации стабильного, чистого аппаратного режима, когда встроенный контроллер Cadence SPI процессора Zynq сам управляет пином CS0 (MIO13) на уровне ядра, откройте файл пользовательского дерева устройств:

nano project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

Полностью замените его содержимое на следующий лаконичный и гарантированно рабочий вариант:

-8

Конфигурация драйверов в ядре Linux (Kernel)

Чтобы операционная система смогла распознать контроллер и создать файл символьного устройства в каталоге /dev/, необходимые драйверы должны быть жестко вкомпилированы в ядро Linux.

Запустите графический конфигуратор ядра:

petalinux-config -c kernel

В открывшемся текстовом меню перейдите по следующему пути:

Device DriversSPI support

Убедитесь, что все эти 6 пунктов отмечены звездочками [*] (режим <M> в виде внешнего модуля не использовать):

  • [*] SPI support
  • [*] Xilinx SPI controller common options
  • [*] Cadence SPI controller (драйвер вашей шины SPI1 на MIO)
  • [*] Xilinx Zynq QSPI controller (драйвер QSPI Flash памяти платы)
  • [*] Xilinx Zynq SPI controller
  • [*] User mode SPI device driver support (необходим для работы /dev/spidev1.0 из Си-кода)

Сохраните изменения (<Save>), подтвердив запись в файл .config, и полностью выйдите из меню (<Exit>).

Шаг 7. Финальная пересборка проекта и подготовка загрузочного носителя

После того как дерево устройств отредактировано, а конфигурации RootFS и Ядра успешно сохранены, необходимо запустить компиляцию всей операционной системы.

Чтобы стереть старые ошибочные кэши компилятора Yocto и принудительно зафиксировать рабочую конфигурацию, выполните последовательную очистку и пересборку дерева устройств:

# 1. Очищаем кэш и принудительно собираем обновленное дерево устройств
petalinux-build -c device-tree -x clean
petalinux-build -c device-tree

# 2. Запускаем глобальную сборку всего дистрибутива Linux
petalinux-build

# 3. Упаковываем загрузочные компоненты в монолитный файл BOOT.BIN
petalinux-package --boot --fsbl --fpga --u-boot --force

Все готовые бинарные файлы появятся в каталоге проекта по пути images/linux/.

Подготовка и запись SD-карты

Для работы в данной конфигурации используемая SD-карта объемом 32 ГБ должна быть предварительно разбита на два независимых раздела:

  • Первый загрузочный раздел: размер ровно 2 ГБ, метка BOOT, файловая система FAT32. На него копируются файлы первичной загрузки.

    Варианты содержимого загрузочного раздела:

    Вариант А (монолитный FIT-образ): BOOT.BIN, boot.scr, image.ub Вариант Б (классический раздельный образ): BOOT.BIN, boot.scr, uImage, system.dtb
  • Второй системный раздел: занимает всё оставшееся свободное пространство (~30 ГБ), метка rootfs, файловая система EXT4.

Для записи файловой системы смонтируйте второй раздел карты в WSL и распакуйте в EXT4 раздел флешки архив rootfs.tar.gz:

sudo tar -xf rootfs.tar.gz -C /mnt/sd_rootfs/

Принудительно сбрасываем кэш записи из оперативной памяти на физический накопитель:

sync

Подключение SD-карты (кардридера) к WSL2 через usbipd-win

Если вы используете WSL2 на Windows и хотите напрямую записать загрузочные файлы на SD-карту (разделы FAT32 и EXT4) , необходимо пробросить USB-устройство (кардридер) внутрь WSL. Для этого используется утилита usbipd-win, которая обязательно устанавливается из Microsoft Store.

-9

1. Определение busid кардридера

Подключите SD-карту к кардридеру, а кардридер — к USB-порту Windows. В PowerShell (администратор) выполните:

usbipd list

Найдите своё устройство. Обычно оно выглядит как USB Mass Storage Device или по vendor ID: 14cd:1212 (как в вашем примере). Запомните BUSID (например, 5-1).

2. Привязка (bind) устройства

usbipd bind --busid 5-1

Если устройство уже было в общем доступе, вы увидите сообщение was already shared — это нормально.

3. Подключение (attach) устройства к WSL

usbipd attach --wsl --hardware-id 14cd:1212

Замените 14cd:1212 на vendor-id вашего устройства (можно подсмотреть в usbipd list). После этого устройство станет доступно внутри WSL2 как /dev/sdX (обычно /dev/sdb или /dev/sdc).

4. Проверка внутри WSL

Откройте терминал WSL (Ubuntu) и выполните:

lsblk

Вы должны увидеть новое блочное устройство (например, sdb) с разделами sdb1, sdb2 и т.д. Теперь с ним можно работать стандартными средствами Linux (fdisk, mkfs, dd, tar).

5. Отключение (detach) устройства после работы

Когда закончите работу с SD-картой, в PowerShell (администратор) выполните:

usbipd detach --busid 5-1

После этого кардридер можно безопасно извлечь из USB-порта и вставлять в слот платы Alinx AC7020C и включать питание.

Операционная система Linux загрузится в терминале COM-порта и сразу предоставит доступ к консоли root@ac7020calinx:~# без ввода пароля, в каталоге появится рабочее устройство
/dev/spidev1.0, а линия CS начнет синхронно опускаться в ноль при отправке данных из Си-кода.

-10

Создаём новый проект через petalinux-create

# 1. Создаём приложение (не spidev-test, а spidev)
petalinux-create -t apps --template c --name spidev --enable

# 2. Скачиваем исходник
wget -O project-spec/meta-user/recipes-apps/spidev/files/spidev.c \
https://raw.githubusercontent.com/torvalds/linux/master/tools/spi/spidev_test.c

# 3. Собираем
petalinux-build -c spidev

# 4. Включаем приложение в финальный образ RootFS
petalinux-build

Проверяем результат


# Бинарник появился внутри rootfs.tar.gz

tar -tzf images/linux/rootfs.tar.gz | grep spidev

Ожидаемый вывод:

./usr/bin/spidev
./usr/bin/spidev_fdx
./usr/bin/spidev_test

Для просмотра на осциллографе:

while true; do spidev -D /dev/spidev1.0 -s 1000000 -v -p "\xAA\x55" -I 1; sleep 0.1; done

-11

Проверка loopback командой


# Однократная проверка

spidev -D /dev/spidev1.0 -s 1000000 -v -l -I 1

# Бесконечная для осциллографа
while true; do spidev -D /dev/spidev1.0 -s 1000000 -v -l -I 1; done

Ожидаемый вывод

При замкнутых MOSI-MISO данные должны возвращаться без изменений:

TX | AA 55 01 02
RX | AA 55 01 02 ← те же байты

Друзья,

Цель платформы Дзен — не обеспечить доступ к информации, коммерческая деятельность вторична, главное — контроль и цензура. Если статья не вписывается в «научный» нарратив, главным инструментом становится не удаление, что может вызвать протест и прекращение публикаций, а искажение статистики. Просмотры исчезают, охват обнуляется, статья становится недоступной.

Это цензура нового типа. Уже не человек, а машина без объяснений и права на апелляцию, решает, что достойно вашего внимания, а что — нет. Она пресекает не ложь, а живой интерес к темам, выходящим за рамки официального курса. Она пресекает не нарушения, а сам потенциал к инакомыслию, как на стороне автора, обесценивая его работу за счёт уменьшения просмотров и ничтожных отчислений, так и на стороне читателя, отказывая ему в праве на информацию.

Но у этой системы есть ахиллесова пята — ваше
осознанное действие. Ваш лайк, комментарий, долгий просмотр — Это способ сказать автору «мне это интересно», а системе: «я имею право на информацию».

Если то, что вы прочитали и узнали, имеет для вас ценность — кнопка «Поддержать» не даст этому исчезнуть.