PetaLinux — это инструментарий для разработки встраиваемых систем Linux, выпущенный компанией Xilinx (теперь под управлением AMD), специально разработанный для ее ПЛИС (таких как Zynq, Zynq UltraScale+ MPSoC, MicroBlaze и др.) и адаптивных SoC. Он создан на основе Yocto Project и предоставляет полный набор инструментов, который упрощает процесс разработки, настройки и развертывания встраиваемых систем Linux. PetaLinux — это не специальное ядро Linux, а скорее набор инструментов для настройки среды разработки, который уменьшает трудозатраты на конфигурирование U-Boot, ядра и корневой файловой системы. Он может автоматически настраивать соответствующее программное обеспечение на основе информации об оборудовании, экспортированной из Vivado.
Здесь мы выберем установку PetaLinux на Ubuntu 20.04.6. Поскольку на хост-машине используется Windows, мы установим виртуальную машину Ubuntu 20.04.6 после установки VirtualBox. Вы также можете установить Ubuntu через VMware. Для получения конкретных инструкций по установке Ubuntu на VirtualBox или VMware, пожалуйста, найдите соответствующую информацию в интернете.
После установки системы Ubuntu необходимо выполнить следующие операции.
Установка библиотек-зависимостей
xsudo apt-get install -y python tofrodos iproute2 gawk xvfb gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev zlib1g:i386 screen pax gzip
PetaLinux по умолчанию использует интерпретатор bash. Проверьте интерпретатор Ubuntu:
xxxxxxxxxxls -l /bin/sh
Если тип интерпретатора совпадает, продолжайте. Если нет, используйте следующую команду, чтобы изменить dash на bash:
xxxxxxxxxxsudo dpkg-reconfigure dash
Во всплывающем диалоговом окне нажмите «НЕТ».
Каталог /opt может создавать папки только под учетной записью root, поэтому для переключения на права администратора требуется дополнительная строка кода:
xxxxxxxxxxsusudo chown -R user:user /optЗамените user:user на имя обычной учетной записи Ubuntu, в моем случае это «mind».
Создайте папку для загрузки PetaLinux. Здесь она создается в /opt/pkg/petalinux. Измените права доступа к папке:
xxxxxxxxxxroot@Ubuntu20:/media/sf_vmshare# mkdir -p /opt/pkg/petalinux/2021.1root@Ubuntu20:/media/sf_vmshare# sudo chown -R mind:mind /opt
Поскольку PetaLinux нельзя установить под учетной записью root, а необходимо устанавливать под обычной учетной записью пользователя, выйдите из режима администратора и войдите в режим обычного пользователя для загрузки (для версии 2021 года в команду необходимо добавить -d):
xxxxxxxxxxmind@Ubuntu20:/media/sf_vmshare$ ./petalinux-v2021.1-final-installer.run -d /opt/pkg/petalinux/2021.1
После этого система начнет установку PetaLinux. Когда вы увидите сообщение "Press Enter to display the license agreements", нажмите Enter, чтобы продолжить. Затем появятся три лицензионных соглашения. Нажмите Q, чтобы выйти, затем нажмите Y и Enter, чтобы продолжить. После этого система начнет установку PetaLinux.
Введите следующую команду, чтобы загрузить среду PetaLinux. Эта команда применяется только к текущему терминалу.
xxxxxxxxxxsource /opt/pkg/petalinux/2021.1/settings.sh
Появится следующий вывод:
xxxxxxxxxxPetaLinux environment set to '/opt/pkg/petalinux/2021.1'WARNING: This is not a supported OSINFO: Checking free disk spaceINFO: Checking installed toolsINFO: Checking installed development librariesINFO: Checking network and other services
Вы можете записать это в системные переменные окружения:
xxxxxxxxxxvi ~/.bashrc#Способ 1: Запишите следующее содержимое в .bashrc. Однако этот способ будет выводить сообщение при каждом открытии терминала.source source /opt/pkg/petalinux/2021.1/settings.sh#Способ 2: Запишите следующее содержимое в .bashrc. Если вам нужно активировать переменные окружения при открытии нового терминала, вы можете просто ввести "speta".alias speta='source /opt/pkg/petalinux/2021.1/settings.sh'
Затем введите echo $PETALINUX:
xxxxxxxxxxecho $PETALINUX
Если отображается каталог установки PetaLinux, это означает, что рабочая среда настроена и работает правильно.
Выполнение команды petalinux-config --get-hw-description вызовет появление окна, в котором можно настроить проект Petalinux. Если он уже был сконфигурирован и вы хотите настроить его позже, вы можете запустить команду "petalinux-config" для его конфигурации.
Используйте клавиши "↑" и "↓" на клавиатуре для выбора меню для настройки и нажмите клавишу "Enter", чтобы войти в подменю. Синяя выделенная первая буква в меню является горячей клавишей для этого меню; нажатие соответствующей выделенной буквы на клавиатуре быстро выберет соответствующее меню. После выбора подменю нажатие клавиши "Y" запишет соответствующую опцию конфигурации в файл конфигурации, и префикс меню изменится на "< * >". Нажатие клавиши "N" не будет компилировать соответствующий код, а нажатие клавиши "M" скомпилирует соответствующий код как модуль, при этом префикс меню изменится на "< M >". Нажмите клавишу "Esc" дважды для выхода, то есть возврата на предыдущий уровень. Нажмите клавишу "?" для просмотра справочной информации по этому меню. Нажмите клавишу "/", чтобы открыть окно поиска, где можно ввести содержимое для поиска. В нижней части интерфейса конфигурации есть пять кнопок. Функции этих пяти кнопок следующие:
xxxxxxxxxx<Select>: Кнопка выбора, та же функция, что и клавиша "Enter", отвечает за выбор и вход в меню.<Exit>: Кнопка выхода, та же функция, что и двойное нажатие клавиши "Esc", выходит из текущего меню и возвращается на предыдущий уровень.<Help>: Кнопка справки, просматривает справочную информацию для выбранного меню.<Save>: Кнопка сохранения, сохраняет измененный файл конфигурации.<Load>: Кнопка загрузки, загружает указанный файл конфигурации.
Краткое описание этих меню сверху вниз:
"Linux Components Selection":
Содержимое подменю показано ниже:
Символ "*" в скобках указывает, что конфигурация включена. Второй и третий пункты указывают, что файл fsbl.elf, используемый в эксперименте, будет сгенерирован автоматически, и ps_init будет автоматически обновлен. Следующие две опции используются для настройки источника u-boot и linux-kernel.
"Auto Config Settings":
В основном включает выбор, включать ли автоматическую конфигурацию для Device tree, Kernel и u-boot. Здесь используется конфигурация по умолчанию, и изменения не требуются.
"Subsystem AUTO Hardware Settings":
Содержимое подменю показано ниже:
При входе в различные подменю периферийных устройств в этом интерфейсе можно обнаружить, что конфигурации по умолчанию уже установлены. Эти конфигурации по умолчанию автоматически настраиваются на основе информации в файле xsa и в основном не требуют ручной настройки. Элемент конфигурации "Serial Settings" используется для настройки отладочного последовательного порта и параметров скорости передачи данных платы разработки.
Измените используемый по умолчанию "ps7_uart_1" в обоих "FSBL Serial stdin/stdout" и "DTG Serial stdin/stdout" на "ps7_uart_0", который является USB-последовательным портом. Это связано с тем, что uart1 является интерфейсом на стороне PL. После внесения изменений нажмите клавишу ESC дважды, чтобы вернуться в предыдущее меню.
"DTG Settings", меню конфигурации FSBL "FSBL Configuration", меню менеджера FPGA "FPGA Manager", меню конфигурации u-boot "u-boot Configuration" и меню конфигурации linux "Linux Configuration" обычно можно оставить по умолчанию.
"Image Packaging Configuration":
Подменю выглядит следующим образом:
Первая опция - это конфигурация типа корневой файловой системы, которая по умолчанию установлена в INITRD и обычно может быть оставлена по умолчанию. Если нам нужно запускать корневые файловые системы Ubuntu или Debian, ее необходимо настроить как EXT4 (SD/eMMC/SATA/USB). Для загрузки с монтированием NFS ее необходимо настроить как NFS.
"Firmware Version Configuration":
Может использоваться для изменения имени хоста и названия продукта пользовательской системы linux. По умолчанию оно совпадает с именем проекта Petalinux и может быть изменено при необходимости.
"Yocto Settings":
Выполняет настройки, связанные с Yocto, которые здесь не будут представлены. Обычно можно оставить по умолчанию.
В опции Linux Components Selection можно настроить источник u-boot и ядра Linux. Нажмите клавишу Enter, чтобы перейти в следующий интерфейс выбора. u-boot и ядро Linux по умолчанию загружаются из GitHub, что требует подключения Linux-хоста к интернету для загрузки. В этом эксперименте соответствующие ресурсы были загружены локально. Ссылки для загрузки: linux-xlnx, uboot-xlnx
Примечание: ① Обязательно используйте версию, соответствующую petalinux; мы используем версию petalinux2021.1. ② Если нескольким проектам petalinux необходимо использовать локальный исходный код, каждый проект petalinux должен иметь свой собственный соответствующий исходный код ядра и исходный код u-boot. В противном случае, если один проект petalinux изменит исходный код, это повлияет на другие проекты.
Скопируйте исходный код ядра на виртуальную машину и распакуйте его. Здесь мы выбираем распаковку в /home/mind/petalinux_downloads (сначала необходимо создать папку petalinux_downloads).
Измените источник ядра Linux/u-boot на локальное получение и настройте адрес загруженного офлайн-пакета после распаковки:
Выберите Linnux Components Selection --> u-boot --> ext-local-src
Linnux Components Selection --> linux-kernel --> ext-local-src
После выбора появятся две дополнительные опции: External u-boot local source settings --->
External u-boot local source settings --->
Выберите эти два пункта, заполните соответствующие адреса, сохраните и выйдите.
Проект компиляции Petalinux по умолчанию требует загрузки некоторых ресурсов из интернета. Если сеть плохая, компиляция может быть очень медленной или даже завершиться неудачей. Чтобы решить эту проблему, мы можем предварительно загрузить два офлайн-пакета ресурсов, а затем настроить Petalinux для офлайн-компиляции. На этом этапе пакеты ресурсов u-boot и Linux были загружены из GitHub. Нам все еще нужно загрузить downloads, ssate:
Примечание: Обязательно загружайте файлы, соответствующие версии Petalinux. Мы используем версию Petalinux 2021.1, поэтому нам нужно найти эти два файла под меткой 2021.1 для загрузки.
Выберите инструмент Petalinux arm- sstate-cache:
Скопируйте загруженные архивы на виртуальную машину и распакуйте их. Здесь мы выбираем распаковку в /home/mind/petalinux-downloads:
Выберите нижнюю опцию "Yocto Settings —>":
В интерфейсе "Yocto Settings —>" снимите выделение с "Enable Network sstate feeds" и выберите "Enable BB NO NETWORK". Поскольку мы уже загрузили необходимые пакеты локально, нет необходимости подключаться к интернету во время компиляции, что может сократить время компиляции.
Примечание: Даже если настроена офлайн-компиляция, система Ubuntu должна иметь возможность подключения к сети при сборке проекта, так как Petalinux необходимо загрузить некоторый исходный код из GitHub.
Установите путь для пакета "sstate_aarch64". Выберите опцию "Local sstate feeds settings —>" на этой странице и настройте путь, где находятся соответствующие распакованные файлы.
Установите путь для пакета "downloads". Сначала выберите опцию < Exit >, чтобы вернуться к интерфейсу, показанному ниже, затем выберите опцию "Add pre-mirror url —>": file:/// должен быть добавлен перед этим путем.
На начальной странице выберите Image Packaging Configuration ---->
Первая опция - это конфигурация типа корневой файловой системы, которая по умолчанию установлена в INITRD и обычно может быть оставлена по умолчанию. Если нам нужно запускать корневые файловые системы Ubuntu или Debian, ее необходимо настроить как EXT4 (SD/eMMC/SATA/USB). Для загрузки с монтированием NFS ее необходимо настроить как NFS. Здесь она установлена в EXT4.
Примечание: Корневая файловая система типа INITRD полностью новая и неизмененная при каждом перезапуске системы Linux. Это означает, что все изменения, сделанные после запуска системы, теряются после выключения питания, и система перезагрузится с предыдущей неизмененной корневой файловой системой. Выбор "EXT4" позволяет разместить корневую файловую систему на разделе ext4 SD-карты или eMMC, поэтому все изменения, сделанные после запуска системы, не будут потеряны после выключения питания.
Опция "Copy final images to tftpboot": Когда в корневом каталоге Ubuntu создается папка с именем tftpboot, проект автоматически копирует соответствующие файлы в каталог /tftpboot после создания образа.
Наконец, нажмите Save, Exit.
После настройки проекта Petalinux и выполнения следующих команд будут сгенерированы образ ядра и файловая система:
xxxxxxxxxxpetalinux-buildpetalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --u-boot --fpga --forceНа этом этапе в каталоге image/linux создаются следующие файлы: BOOT.bin, boot.scr, image.ub и rootfs.tar.gz. Далее необходимо сохранить образ ядра и файловую систему на TF-карту.
Вставьте TF-карту. В это время вы можете проверить и выбрать место подключения TF-карты в правом нижнем углу виртуальной машины:
Отформатируйте TF-карту. Вы можете использовать программу Disks в системе Ubuntu для форматирования TF-карты: необходимо создать два раздела, один раздел FAT32 (для хранения файлов boot.bin, boot.scr и image.ub), а другой — раздел ext4 (для хранения файловой системы).
xxxxxxxxxxumount /dev/sdb1sudo fdisk /dev/sdb
Создайте первый раздел: раздел FAT32
Введите "p", чтобы увидеть текущее состояние разделов.
Введите "d", чтобы удалить раздел. Если разделов несколько, необходимо ввести "d" несколько раз.
Снова введите "p", чтобы увидеть текущее состояние разделов. Если текущий раздел не является разделом DOS, введите "o", чтобы изменить его на DOS.
Введите "n", чтобы создать раздел. Введите "p", затем последовательно введите "1", "2048" и "+200M".
Введите "t", чтобы установить тип раздела, затем введите "c", чтобы установить тип "W95 FAT32 LBA".
Введите "a", чтобы сделать раздел загрузочным.
Создайте второй раздел: раздел EXT4
Используйте команду "n", чтобы выделить все оставшееся пространство второму разделу. Просто нажмите Enter.
Проверьте разделы
Введите "p", чтобы проверить, есть ли два раздела. Если все правильно, введите "w", чтобы записать таблицу разделов на TF-карту.
Отформатируйте таблицу разделов
xxxxxxxxxx# Отформатировать первый раздел в FAT32 и назвать его boot# Отформатировать второй раздел в ext4 и назвать его rootfssudo mkfs.vfat -F 32 -n boot /dev/sdb1sudo mkfs.ext4 -L rootfs /dev/sdb2Скопируйте BOOT.BIN, boot.scr и image.ub из каталога проекта images -> linux в раздел FAT SD-карты.
Распакуйте файл ./image/rootfs.tar.gz во второй раздел
xxxxxxxxxxsudo tar -xzf ./images/linux/rootfs.tar.gz -C /media/mind/rootfs/syncОтмонтируйте TF-карту
Вставьте TF-карту в плату, установите перемычку в режим загрузки с TF-карты, подключите плату к последовательному порту и включите питание.
Используя пакеты Petalinux BSP, мы можем удобно и быстро предоставлять наши проверенные проекты Petalinux другим или использовать проверенные проекты Petalinux других разработчиков. Вам нужно освоить всего две команды для создания и использования пакетов BSP.
Создайте пакет BSP
Используйте следующую команду для создания пакета BSP для проекта Petalinux в текущем пути терминала:
x
cd petalinux-mindpetalinux-package --bsp -p ./ --output petalinux-mind.bsp
# Путь после параметра -p — это путь к корневому каталогу проекта Petalinux# Имя после параметра –output — это имя пакета BSPИспользуйте пакет BSP
Используйте следующую команду для создания проекта Petalinux с использованием пакета BSP в текущем пути терминала:
x
petalinux-create -t project -n new_project -s ./petalinux-mind.bsp
# Имя после параметра -n — это имя проекта Petalinux# Путь после параметра -s — это путь к используемому нами пакету BSPПримечание: Если проект, использованный для создания пакета BSP, успешно компилируется, то проект, созданный с использованием этого пакета BSP, также можно будет скомпилировать напрямую.