Используя локальные файлы, откройте Source Компиляция U-Boot/Linux,Может адаптироваться к рабочим привычкам некоторых разработчиков.,Это также может улучшить скорость компиляции U-Boot/Linux.
PetaLinux — это инструмент разработки Linux, запущенный Xilinx на основе Yocto. Он может одним щелчком мыши скомпилировать полный встроенный дистрибутив Linux, включая миллионы файлов исходного кода и тысячи приложений. Однако полная компиляция PetaLinux/Yocto может потребовать загрузки ГБ файлов из Интернета, что может занять десятки минут. Даже изменение одной строки кода может занять несколько минут.
Если при отладке одной платы вы меняете только одну строку кода, вам все равно придется выполнять эти операции, что избыточно и влияет на эффективность разработки.
Чтобы адаптироваться к рабочим привычкам разработчиков и повысить скорость, можно использовать локальную компиляцию файлов, а также можно интегрировать OpenSource. Компиляция U-Boot/Linux。
3 года назад,Я написалИнтеграция Xilinx Компиляция и открытие проекта PetaLinux Source U- Компиляция загрузки/Linux。по сравнению с3 года назад,PetaLinux много раз обновлялся. Итак, на основе PetaLinux Версия 2021/2022 г. Обновлено для предоставления более точных методов. Кроме того, в этой статье представлен полный сценарий для автоматического получения исходного кода U-Boot/Linux из проекта PetaLinux и из каталога проекта PetaLinux для открытия Процесс Source компилирует U-Boot/Linux и обновляет BOOT.BIN, image и image.ub проекта PetaLinux.
для Установка Пета Линукса, обратитесь к документу Xilinx UG1144. PetaLinux Tools Reference Guide, и Автономная установка пакетов зависимостей PetaLinux в один клик。
существоватьXilinxскачатьвеб-сайтОбласть загрузки встроенных инструментов Скачать состояние cache。 Текущее состояние Кэш разделен на Arm64 (AArch64), Arm, mbfull, mblite четыре файла. AArch64 версия 2021.1 sstate Размер кэша 11,84. GB,Arm sstate Размер кэша 5,09. GB。 Перед загрузкой необходимо зарегистрировать аккаунт на сайте Xilinx. После входа в систему,выбиратьaarch64 sstate-cacheждать,Из чего-то вродеsstate_aarch64_2022.2_10071807.tar.gz Адрес для загрузки SState файл кэша.
После загрузки разархивируйте его. На примере AArch64 вы увидите структуру каталогов, подобную следующей.
hankf@XSZGS4:aarch64$ ls
00 06 0c 12 18 1e 24 2a 30 36 3c 42 48 4e 54 5a 60 66 6c 72 78 7e 84 8a 90 96 9c a2 a8 ae b4 ba c0 c6 cc d2 d8 de e4 ea f0 f6 fc
01 07 0d 13 19 1f 25 2b 31 37 3d 43 49 4f 55 5b 61 67 6d 73 79 7f 85 8b 91 97 9d a3 a9 af b5 bb c1 c7 cd d3 d9 df e5 eb f1 f7 fd
02 08 0e 14 1a 20 26 2c 32 38 3e 44 4a 50 56 5c 62 68 6e 74 7a 80 86 8c 92 98 9e a4 aa b0 b6 bc c2 c8 ce d4 da e0 e6 ec f2 f8 fe
03 09 0f 15 1b 21 27 2d 33 39 3f 45 4b 51 57 5d 63 69 6f 75 7b 81 87 8d 93 99 9f a5 ab b1 b7 bd c3 c9 cf d5 db e1 e7 ed f3 f9 ff
04 0a 10 16 1c 22 28 2e 34 3a 40 46 4c 52 58 5e 64 6a 70 76 7c 82 88 8e 94 9a a0 a6 ac b2 b8 be c4 ca d0 d6 dc e2 e8 ee f4 fa universal
05 0b 11 17 1d 23 29 2f 35 3b 41 47 4d 53 59 5f 65 6b 71 77 7d 83 89 8f 95 9b a1 a7 ad b3 b9 bf c5 cb d1 d7 dd e3 e9 ef f5 fb
Выполните команду petalinux-config в каталоге проекта PetaLinux и щелкните меню Yocto. Settings->Local sstate feeds settings->local sstate feeds URL устанавливает локальный SState каталог кэша.
Интерфейс настройки локального кэша SState
Для MPSoC используйте aarch64, например /opt/Xilinx/peta/2021.1/sstate/aarch64. Для Zynq-7000 используйте Arm, например /opt/Xilinx/peta/2021.1/sstate/arm. После установки файл project-spec/configs/config будет содержать указанный каталог, например следующую строку:
CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL="/opt/Xilinx/peta/2021.1/sstate/aarch64"
Для использования sstate,Можно обратиться кXilinxскачатьвеб-сайт Область загрузки встроенных инструментовизREADME for state-cache。
существоватьXilinxскачатьвеб-сайтОбласть загрузки встроенных инструментов скачать Загружает пакет файлов. Размер пакета загружаемых файлов версии 2021.1 составляет 39,75 ГБ.
Загружает пакет файлов,Существует также множество сжатых пакетов часто используемого программного обеспечения. Разархивировать после скачивания,Вы можете увидеть структуру каталогов, аналогичную приведенной ниже.
hankf@XSZGS4:downloads$ ls
acl-2.2.53.tar.gz git2_github.com.tpm2-software.tpm2-tss-engine.git.tar.gz libxml2-2.9.10.tar.gz
acpica-unix-20200717.tar.gz git2_github.com.troglobit.sysklogd.git.tar.gz libXmu-1.1.3.tar.bz2
adwaita-icon-theme-3.36.1.tar.xz git2_github.com.ucb-bar.berkeley-softfloat-3.git.tar.gz libXrandr-1.5.2.tar.bz2
alsa-lib-1.2.3.2.tar.bz2 git2_github.com.uclouvain.openjpeg.git.tar.gz libXrender-0.9.10.tar.bz2
alsa-plugins-1.2.2.tar.bz2 git2_github.com.vim.vim.git.tar.gz libXres-1.2.0.tar.bz2
alsa-tools-1.2.2.tar.bz2
......
В меню конфигурации petalinux-config" -> Yocto Settings -> Add pre-mirror url "внутри,Введите вышеуказанный файлсуществоватьиз Оглавление“file://path/downloads”。
Файлы, необходимые PetaLinux в процессе компиляции. После завершения компиляции,Каталог build/downloads/ может содержать дополнительные файлы. Если источником являются локальные загрузки, упомянутые выше.,Тогда это просто ссылка на файл. Если это из интернета скачать,Тогда это правдаиздокумент。Вы можете использовать команду“ls -l | grep -v ">" | grep -v Done» исключает ссылки и файлы с суффиксом Done, поэтому отображаются только файлы из сети.
Рекомендуется скопировать настоящие файлы в локальный каталог загрузок, упомянутый выше. Скомпилируйте проект PetaLinux позже.,Эти локальные файлы можно использовать повторно. последующая компиляция,Это будет не из интернета скачать,Это будет быстрее.
$ ls build/downloads/*.xz
build/downloads/atk-2.28.1.tar.xz build/downloads/grep-3.1.tar.xz build/downloads/netbase_5.4.tar.xz
build/downloads/at-spi2-atk-2.26.2.tar.xz build/downloads/gst-rtsp-server-1.14.4.tar.xz build/downloads/ofono-1.24.tar.xz
build/downloads/at-spi2-core-2.28.0.tar.xz build/downloads/gtk+-2.24.32.tar.xz build/downloads/pango-1.42.4.tar.xz
... ...
$ ls build/downloads/*.bz2
build/downloads/alsa-lib-1.1.6.tar.bz2 build/downloads/libassuan-2.5.1.tar.bz2 build/downloads/pcre-8.42.tar.bz2
build/downloads/alsa-plugins-1.1.6.tar.bz2 build/downloads/libgpg-error-1.32.tar.bz2 build/downloads/pixman-0.34.0.tar.bz2
build/downloads/alsa-tools-1.1.6.tar.bz2 build/downloads/libICE-1.0.9.tar.bz2 build/downloads/sysvinit-2.88dsf.tar.bz2
... ...
Если вы уверены, что все пакеты уже локальные,Можно удалить сетевое соединение,осуществлять Офлайн-компиляция,Улучшит скорость компиляции.
В меню «Настройки Yocto» уберите «Включить каналы состояния сети» и выберите «Включить BB NO NETWORK».
PetaLinux в проекте компиляции,Автоматически Скомпилирует LinuxиU-Boot。
Используйте команду «petalinux-build -c kernel» для компиляции только Linux; используйте команду «petalinux-build -c u-boot» для компиляции только U-Boot; .
Файл конфигурации Linux .config также сохраняется в подкаталоге kernel-build-artifacts каталога сборки. Для проекта ZCU106 BSP PetaLinux 2021.1 файл конфигурации Linux .config находится в build/tmp/work-shared/zynqmp-generic/kernel-build-artifacts/.
Если используется формат image.ub, в каталоге сборки также имеется его файл для создания файла image.ub. Для проекта ZCU106 BSP PetaLinux 2021.1 это файл build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+gitAUTOINC+c830a552a6-r0/linux-zynqmp_generic-standard-build/fit-image-petalinux- initramfs -image.its.
В подкаталоге build внутри каталога сборки сохраняется файл конфигурации UBoot .config для ZCU106 PetaLinux 2021.1. Проект BSP, файл конфигурации UBoot .config находится в build/tmp/work/zynqmp_generic-xilinx-linux/u-boot-xlnx/v2021.01-xilinx-v2021.1+gitAUTOINC+41fc08b3fe-r0/build/.
PetaLinux также предоставляет инструмент разработчика Yocto.,Исходный код Linux→UBoot можно получить непосредственно через devtool. В 2021 году и более поздних версиях,PetaLinux напрямую предоставляет команду petalinux-devtool.,Реализовать функции devtool Yocto. В версиях до 2021 года,Импортировать каталогcomponents/yocto/Внизиз“environment-setup-aarch64-xilinx-linux” и В среде «layers/core/oe-init-build-env» можно использовать инструмент разработчика Yocto.
При выполнении команды «petalinux-devtoolmodify linux-xlnx» исходный код Linux будет сохранен в каталоге «comComponents/yocto/workspace/sources/linux-xlnx».
При выполнении команды «petalinux-devtoolmodify u-boot-xlnx» исходный код Linux будет сохранен в каталоге «comComponents/yocto/workspace/sources/u-boot-xlnx».
После того, как инженер изменил приведенный выше исходный код LinuxиUBoot,Скомпилируйте проект PetaLinux напрямую,Изменения вступят в силу.
После завершения отладки выполните команду «petalinux-devtool Finish linux-xlnx project-spec/meta-user», чтобы создать патч для Linux и больше не использовать приведенный выше код. Таким образом, использование Petalinux-devtool для получения кода упрощает создание патчей и объединение изменений обратно в проект PetaLinux.
В сочетании с исходным кодом LinuxиUBoot, полученным с помощью devtool, Файл конфигурации .config в каталоге сборки может интегрировать процесс компиляции PetaLinux Linux и UBoot с Open Source Процесс компиляции.
Обратите внимание: перед использованием Linux и UBoot успешно скомпилируйте проект PetaLinux.
Следующий скрипт получает исходный код Linux-UBoot с помощью devtool и копирует файл конфигурации Linux-UBoot .config из каталога сборки в соответствующий каталог исходного кода.
#!/bin/bash
# Author: Hank FU, hankf@amd.com; hankf@xilinx.com;
# osl-fetch-source.sh
# Execute osl-fetch-source.sh in PetaLinux project directory.
if [ ! -d ./project-spec/meta-user/recipes-bsp/ ]; then
echo "Not PetaLinux project directory."
echo "No directory: ./project-spec/meta-user/recipes-bsp "
echo "Exit."
exit 1
fi
echo "Check image of PetaLinux project."
ls -l ./images/linux/u-boot.elf
ls -l ./images/linux/Image
if [ ! -f ./images/linux/u-boot.elf ] || [ ! -f ./images/linux/Image ]; then
echo "PetaLinux project is not built successfully."
echo "Please build it first."
exit 1
fi
peta_dir=`pwd`
# check petalinux tool
echo "check petalinux tool:"
which petalinux-build
which petalinux-devtool
petalinux_devtool=`which petalinux-devtool`
echo "petalinux devtool: $petalinux_devtool"
# PetaLinux 2020.1: no petalinux-devtool
# source /opt/pkg/petalinux/settings.sh
# source <plnx-proj-root>/components/yocto/environment-setup-aarch64-xilinx-linux
# source <plnx-proj-root>/components/yocto/layers/core/oe-init-build-env
if [ "$petalinux_devtool" = "" ]; then
echo "Source yocto environment"
# source components/yocto/environment-setup-aarch64-xilinx-linux
# source components/yocto/layers/core/oe-init-build-env
# No output re-direction, command "devtool" in the current bash after "source".
if [ -f ./components/yocto/environment-setup-aarch64-xilinx-linux ]; then
echo "Source yocto environment: aarch64"
source ./components/yocto/environment-setup-aarch64-xilinx-linux
elif [ -f ./components/yocto/environment-setup-cortexa72-cortexa53-xilinx-linux ]; then
echo "Source yocto environment: cortexa72"
source ./components/yocto/environment-setup-cortexa72-cortexa53-xilinx-linux
fi
source components/yocto/layers/core/oe-init-build-env
# It enter directory "build"
echo -e "\nShow current directory: "
pwd
if [ -d ../components/yocto/ ]; then
cd ..
fi
if [ ! -d ./components/yocto/ ]; then
echo -e "\nError current directory: "
pwd
exit
fi
petalinux_devtool=`which devtool`
echo "petalinux devtool: $petalinux_devtool"
devtool create-workspace ./components/yocto/workspace/sources
fi
if [ "$petalinux_devtool" = "" ]; then
echo "Error: petalinux devtool is invalid"
exit
fi
echo -e "\nShow current directory: "
pwd
sources_dir=$peta_dir/components/yocto/workspace/sources
echo -e "\nTry to modify components into directory: $sources_dir\n"
# ug1144 Table 42: petalinux-build -c Components
#
# Get the source code from git url specifi ed in meta-layers:
# petalinux-devtool modify <recipe-name>
#
# Creates a patch for the committed changes in recipe sources directory.
# petalinux-devtool finish <recipe-name> <destination layer path>
echo -e "\nTry to modify linux-xlnx"
$petalinux_devtool modify linux-xlnx
linux_kernel_config_file=`find -name ".config" | grep -i kernel-build-artifacts`
if [ "$linux_kernel_config_file" = "" ]; then
echo "Failed to findLinux-kernel .config file.";
exit 1
fi
echo -e "\nLinux-kernel .config file: $linux_kernel_config_file"
if [ -d $sources_dir/linux-xlnx/ ]; then
cp $linux_kernel_config_file $sources_dir/linux-xlnx/config_file_used_by_petalinux
# only one arch config files is valid.
cp $linux_kernel_config_file $sources_dir/linux-xlnx/arch/arm64/configs/xilinx_peta_defconfig
cp $linux_kernel_config_file $sources_dir/linux-xlnx/arch/arm/configs/xilinx_peta_defconfig
cp $linux_kernel_config_file $sources_dir/linux-xlnx/
else
echo -e "\nNo Linux-kernel source code directory"
fi
linux_kernel_its_file=`find -name "fit-image-petalinux*.its" | grep -i build `
if [ "$linux_kernel_its_file" = "" ]; then
echo "Failed to find Linux-kernel image.ub its file.";
exit 1
fi
echo -e "\nLinux-kernel image.ub its file: $linux_kernel_its_file"
if [ -d $sources_dir/linux-xlnx/ ]; then
cp $linux_kernel_its_file $sources_dir/linux-xlnx/
else
echo -e "\nNo Linux-kernel source code directory"
fi
echo -e "\nTry to modify u-boot-xlnx"
$petalinux_devtool modify u-boot-xlnx
u_boot_config_file=`find -name ".config" | grep -i u-boot-xlnx | grep -i build `
if [ "$u_boot_config_file" = "" ]; then
echo "Failed to find U-Boot .config file.";
exit 1
fi
echo -e "\nU-boot .config file: $u_boot_config_file"
if [ -d $sources_dir/u-boot-xlnx/ ]; then
cp $u_boot_config_file $sources_dir/u-boot-xlnx/config_file_used_by_petalinux
cp $u_boot_config_file $sources_dir/u-boot-xlnx/configs/xilinx_peta_defconfig
cp $u_boot_config_file $sources_dir/u-boot-xlnx/
else
echo -e "\nNo U-boot source code directory"
fi
echo -e "\nShow current directory: "
pwd
if [ -d $sources_dir/ ]; then
echo -e "\nShow components that can be modified in $sources_dir/"
ls -l $sources_dir/
else
echo -e "\nNo components that can be modified in $sources_dir/"
fi
# petalinux-devtool finish <recipe-name> <destination layer path>
#
# petalinux-devtool reset <recipe-name> to remove the source directory for the recipe from workspace.
В каталоге UBoot, полученном с помощью приведенного выше сценария, скомпилируйте UBoot, чтобы получить файл u-boot.elf, а затем заимствуйте другие файлы, созданные проектом PetaLinux, для создания BOOT.bin, который может запускать и загружать Linux.
Выполните следующий скрипт в каталоге проекта PetalLinux, чтобы создать UBoot и автоматически сгенерировать BOOT.bin.
#!/bin/bash
# Author: Hank FU, hankf@amd.com
# osl-make-uboot.sh
# Execute osl-make-uboot.sh in PetaLinux project directory.
# Usage: osl-make-uboot.sh uboot_source_dir [ Default: components/yocto/workspace/sources/u-boot-xlnx]
if [ ! -d ./project-spec/meta-user/recipes-bsp/ ]; then
echo "Not PetaLinux project directory."
echo "No directory: ./project-spec/meta-user/recipes-bsp "
echo "Exit."
exit 1
fi
peta_dir=`pwd`
echo "Current directory: $peta_dir"
petalinux_tool=`which petalinux-build`
if [ "$petalinux_tool" = "" ]; then
echo "Error: petalinux-build is invalid"
exit 1
fi
# Check PetaLinux building environment variable settings.
if [ "$ARCH" != "arm" ]; then
if [ "$ARCH" != "arm64" ]; then
echo "ARCH is not set correctly.";
exit 1
fi
fi
if [ "$CROSS_COMPILE" = "" ]; then
echo "CROSS_COMPILE is not set.";
exit 1
fi
echo "PetaLinux building environment variable is set.";
echo "ARCH: $ARCH"
echo -e "CROSS_COMPILE: $CROSS_COMPILE\n"
uboot_dir=$1
if [ "$uboot_dir" = "" ]; then
if [ -d ./components/yocto/workspace/sources/u-boot-xlnx/arch/arm/ ]; then
uboot_dir=./components/yocto/workspace/sources/u-boot-xlnx
else
uboot_dir=
fi
fi
if [ ! -d $uboot_dir ]; then
echo "No U-Boot source directory: $uboot_dir"
echo "Usage: $0 uboot_source_dir [ Default: components/yocto/workspace/sources/u-boot-xlnx]"
exit 1
fi
cd $uboot_dir
echo "U-Boot source directory: "
pwd
if [ ! -f .config ]; then
echo "Has no config file: .config."
echo "U-Boot source code not configured."
exit 1
fi
make -j
ls -l -h u-boot.elf
if [ ! -f u-boot.elf ]; then
echo "Failed to build U-Boot in directory: $peta_dir/$uboot_dir"
exit 1
fi
cd $peta_dir
rm -f images/linux/BOOT.BIN
cp $uboot_dir/u-boot.elf ./images/linux/
petalinux-package --boot --u-boot $uboot_dir/u-boot.elf --force
ls -l -h images/linux/BOOT.BIN
В каталоге Linux, полученном указанным выше скриптом,Скомпилировать Linux,Получить файл изображения,Его можно запустить напрямую с помощью system.dtb и rootfs.cpio.gz.u-boot.
Вы также можете создать image.ub на основе приведенного выше файла. Однако, когда файл PetaLinux ссылается на файл dtb и файл rootfs, используется внутренний абсолютный путь. Рекомендуется изменить его на каталог images/linux проекта PetaLinux. Обратите внимание на следующие файлы: system-top.dtb был изменен на system.dtb, petalinux-initramfs-image-zynqmp-generic.cpio.gz был изменен на rootfs.cpio.gz, а путь также был изменен на images/ Linux-каталог PetaLinux. Короче говоря, убедитесь, что путь к файлу дерева устройств в его файле правильный, а путь к файлу cpio.gz файловой системы правильный.
/dts-v1/;
/ {
description = "U-Boot fitImage for PetaLinux/5.10+gitAUTOINC+c830a552a6/zynqmp-generic";
#address-cells = <1>;
images {
kernel-1 {
description = "Linux kernel";
data = /incbin/("linux.bin");
type = "kernel";
arch = "arm64";
os = "linux";
compression = "gzip";
load = <0x80000>;
entry = <0x80000>;
hash-1 {
algo = "sha256";
};
};
fdt-system-top.dtb {
description = "Flattened Device Tree blob";
/* data = /incbin/("/proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+gitAUTOINC+c830a552a6-r0/recipe-sysroot/boot/devicetree/system-top.dtb"); */
data = /incbin/("/proj/hankf/v211/zcu106-bsp-peta/images/linux/system.dtb");
type = "flat_dt";
arch = "arm64";
compression = "none";
hash-1 {
algo = "sha256";
};
};
ramdisk-1 {
description = "petalinux-initramfs-image";
/* data = /incbin/("/proj/hankf/v211/zcu106-bsp-peta/build/tmp/deploy/images/zynqmp-generic/petalinux-initramfs-image-zynqmp-generic.cpio.gz"); */
data = /incbin/("/proj/hankf/v211/zcu106-bsp-peta/images/linux/rootfs.cpio.gz");
type = "ramdisk";
arch = "arm64";
os = "linux";
compression = "none";
hash-1 {
algo = "sha256";
};
};
};
configurations {
default = "conf-system-top.dtb";
conf-system-top.dtb {
description = "1 Linux kernel, FDT blob, ramdisk";
kernel = "kernel-1";
fdt = "fdt-system-top.dtb";
ramdisk = "ramdisk-1";
hash-1 {
algo = "sha256";
};
};
};
};
Выполните следующий скрипт в каталоге проекта PetalLinux для процесса. компиляции Linux с открытым исходным кодом и перенесите файлы Image и Image.ub скопировать в PetalLinux. Каталог «images/linux/» в каталоге проекта.
#!/bin/bash
# Author: Hank FU, hankf@amd.com
# osl-make-linux.sh
# Execute osl-make-linux.sh in PetaLinux project directory.
# Usage: osl-make-linux.sh linux_source_dir [ Default: components/yocto/workspace/sources/linux-xlnx]
if [ ! -d ./project-spec/meta-user/recipes-bsp/ ]; then
echo "Not PetaLinux project directory."
echo "No directory: ./project-spec/meta-user/recipes-bsp "
echo "Exit."
exit 1
fi
peta_dir=`pwd`
echo "Current directory: $peta_dir"
petalinux_tool=`which petalinux-build`
if [ "$petalinux_tool" = "" ]; then
echo "Error: petalinux-build is invalid"
exit 1
fi
# Check PetaLinux building environment variable settings.
if [ "$ARCH" != "arm" ]; then
if [ "$ARCH" != "arm64" ]; then
echo "ARCH is not set correctly.";
exit 1
fi
fi
if [ "$CROSS_COMPILE" = "" ]; then
echo "CROSS_COMPILE is not set.";
exit 1
fi
echo "PetaLinux building environment variable is set.";
echo "ARCH: $ARCH"
echo -e "CROSS_COMPILE: $CROSS_COMPILE\n"
linux_dir=$1
if [ "$linux_dir" = "" ]; then
if [ -d ./components/yocto/workspace/sources/linux-xlnx/arch/arm/ ]; then
linux_dir=./components/yocto/workspace/sources/linux-xlnx
else
linux_dir=
fi
fi
if [ ! -d $linux_dir ]; then
echo "No Linux kernel directory: $linux_dir"
echo "Usage: $0 linux_source_dir [ Default: components/yocto/workspace/sources/linux-xlnx]"
exit 1
fi
cd $linux_dir
echo "Linux kernel directory: "
pwd
echo ""
if [ ! -f .config ]; then
echo "Has no config file: .config."
echo "Linux kernel source code not configured."
exit 1
fi
make -j
ls -l -h ./arch/arm64/boot/Image
ls -l -h vmlinux
if [ ! -f ./arch/arm64/boot/Image ]; then
echo "Failed to build Linux in directory: $peta_dir/$linux_dir"
exit 1
fi
# Build image.ub
if [ -f vmlinux ]; then
echo "Linux vmlinux in directory: $peta_dir/$linux_dir:: "
ls -l vmlinux
linux_kernel_its_file=` find -name "fit-image-petalinux*.its" `
if [ ! "$linux_kernel_its_file" = "" ]; then
echo "Create image.ub by using its file: $linux_kernel_its_file."
rm -f linux_objcopy.bin
rm -f linux.bin
rm -f image.ub
aarch64-linux-gnu-objcopy -O binary -R .note -R .comment -S vmlinux linux_objcopy.bin
gzip -9 linux_objcopy.bin
mv -f linux_objcopy.bin.gz linux.bin
mkimage -f $linux_kernel_its_file image.ub
else
echo "No image.ub its file in directory: $peta_dir/$linux_dir"
fi
else
echo "Failed to build Linux vmlinux in directory: $peta_dir/$linux_dir"
fi
# Copy Image and image.ub to PetaLinux project's directory: images/linux/
cd $peta_dir
rm -f images/linux/Image
rm -f images/linux/image.ub
cp $linux_dir/arch/arm64/boot/Image ./images/linux/
cp $linux_dir/image.ub ./images/linux/
ls -l -h images/linux/Image
ls -l -h images/linux/image.ub
После использования процесса компиляции OpenSource Linux и последующего возврата к компиляции Petalinux вы получите следующую ошибку при выполнении Petalinux-build. Вам необходимо выполнить команду «mrproper» в каталоге исходного кода Linux, чтобы очистить каталог исходного кода Linux.
NOTE: Executing Tasks
NOTE: linux-xlnx: compiling from external source tree /proj/hankf/v211/zcu106-bsp-peta/components/yocto/workspace/sources/linux-xlnx
ERROR: linux-xlnx-5.10+git999-r0 do_compile: oe_runmake failed
ERROR: linux-xlnx-5.10+git999-r0 do_compile: Execution of '/proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655' failed with exit code 1:
***
*** The source tree is not clean, please run 'make mrproper'
*** in /proj/hankf/v211/zcu106-bsp-peta/components/yocto/workspace/sources/linux-xlnx
***
make[1]: *** [/proj/hankf/v211/zcu106-bsp-peta/components/yocto/workspace/sources/linux-xlnx/Makefile:547: outputmakefile] Error 1
make: *** [/proj/hankf/v211/zcu106-bsp-peta/components/yocto/workspace/sources/linux-xlnx/Makefile:185: __sub-make] Error 2
WARNING: /proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655:306 exit 1 from 'exit 1'
WARNING: Backtrace (BB generated script):
#1: bbfatal_log, /proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655, line 306
#2: die, /proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655, line 286
#3: oe_runmake, /proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655, line 161
#4: kernel_do_compile, /proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655, line 197
#5: do_compile, /proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655, line 152
#6: main, /proj/hankf/v211/zcu106-bsp-peta/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile.49655, line 310
Backtrace (metadata-relative locations):
#1: bbfatal_log, /proj/hankf/v211/zcu106-bsp-peta/components/yocto/layers/core/meta/classes/logging.bbclass, line 72
#2: die, /proj/hankf/v211/zcu106-bsp-peta/components/yocto/layers/core/meta/classes/base.bbclass, line 56
#3: oe_runmake, /proj/hankf/v211/zcu106-bsp-peta/components/yocto/layers/core/meta/classes/base.bbclass, line 65
#4: kernel_do_compile, /proj/hankf/v211/zcu106-bsp-peta/components/yocto/layers/meta-petalinux/oe-core/meta/classes/kernel.bbclass, line 349
#5: do_compile, autogenerated, line 2
После выполнения команды «petalinux-devtool reset», чтобы прекратить использование внешнего исходного кода, а затем с помощью команды «petalinux-devtoolmodify», чтобы получить исходный код, вы можете получить следующую ошибку. Пожалуйста, удалите все файлы в каталоге сборки проекта Petalinux, перекомпилируйте проект Petalinux, а затем получите исходный код с помощью команды «petalinux-devtoolmodify».
NOTE: Executing Tasks
ERROR: Error executing a python function in exec_python_func() autogenerated:
The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
0001:
*** 0002:devtool_post_patch(d)
0003:
File: '/proj/hankf/v211/zcu106-bsp-peta/components/yocto/layers/core/meta/classes/devtool-source.bbclass', lineno: 226, function: devtool_post_patch
0222: bb.build.exec_func('do_patch', localdata)
0223: rm_patches()
0224: # Now we need to reconcile the new branch with the no-overrides one
0225: # (otherwise we'd likely be left with identical commits that have different hashes)
*** 0226: bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir)
0227: bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir)
0228: bb.process.run('git tag -f devtool-patched', cwd=srcsubdir)
0229:}
0230:
File: '/proj/hankf/v211/zcu106-bsp-peta/components/yocto/layers/core/bitbake/lib/bb/process.py', lineno: 184, function: run
0180: if not stderr is None:
0181: stderr = stderr.decode("utf-8")
0182:
0183: if pipe.returncode != 0:
*** 0184: raise ExecutionError(cmd, pipe.returncode, stdout, stderr)
0185: return stdout, stderr
Exception: bb.process.ExecutionError: Execution of 'git rebase devtool-no-overrides' failed with exit code 128:
fatal: It seems that there is already a rebase-apply directory, and
I wonder if you are in the middle of another rebase. If that is the
case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please
rm -fr ".git/rebase-apply"
and run me again. I am stopping in case you still have something
valuable there.