Улучшить скорость компиляции PetaLinux/Yocto и интегрировать компиляцию U-Boot/Linux с открытым исходным кодом — версия PetaLinux 2021/2022.
Улучшить скорость компиляции PetaLinux/Yocto и интегрировать компиляцию U-Boot/Linux с открытым исходным кодом — версия PetaLinux 2021/2022.

Улучшить скорость компиляции PetaLinux/Yocto и интегрировать компиляцию U-Boot/Linux с открытым исходным кодом — версия PetaLinux 2021/2022.

Подвести итог

Используя локальные файлы, откройте 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 в один клик

Улучшить скорость компиляции PetaLinux.

Использовать локальный кеш SState

существовать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 вы увидите структуру каталогов, подобную следующей.

Язык кода:javascript
копировать
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 ГБ.

Загружает пакет файлов,Существует также множество сжатых пакетов часто используемого программного обеспечения. Разархивировать после скачивания,Вы можете увидеть структуру каталогов, аналогичную приведенной ниже.

Язык кода:javascript
копировать
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 позже.,Эти локальные файлы можно использовать повторно. последующая компиляция,Это будет не из интернета скачать,Это будет быстрее.

Язык кода:javascript
копировать
$ 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 в проекте компиляции,Автоматически Скомпилирует 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/.

devtool получает исходный код Linux и UBoot

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

В сочетании с исходным кодом LinuxиUBoot, полученным с помощью devtool, Файл конфигурации .config в каталоге сборки может интегрировать процесс компиляции PetaLinux Linux и UBoot с Open Source Процесс компиляции.

Обратите внимание: перед использованием Linux и UBoot успешно скомпилируйте проект PetaLinux.

Получить исходный код и файлы конфигурации

Следующий скрипт получает исходный код Linux-UBoot с помощью devtool и копирует файл конфигурации Linux-UBoot .config из каталога сборки в соответствующий каталог исходного кода.

Язык кода:javascript
копировать
#!/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, полученном с помощью приведенного выше сценария, скомпилируйте UBoot, чтобы получить файл u-boot.elf, а затем заимствуйте другие файлы, созданные проектом PetaLinux, для создания BOOT.bin, который может запускать и загружать Linux.

Выполните следующий скрипт в каталоге проекта PetalLinux, чтобы создать UBoot и автоматически сгенерировать BOOT.bin.

Язык кода:javascript
копировать
#!/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, полученном указанным выше скриптом,Скомпилировать 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 файловой системы правильный.

Язык кода:javascript
копировать
/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/» в каталоге проекта.

Язык кода:javascript
копировать
#!/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.

Язык кода:javascript
копировать
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

Ошибка devtool_post_patch

После выполнения команды «petalinux-devtool reset», чтобы прекратить использование внешнего исходного кода, а затем с помощью команды «petalinux-devtoolmodify», чтобы получить исходный код, вы можете получить следующую ошибку. Пожалуйста, удалите все файлы в каталоге сборки проекта Petalinux, перекомпилируйте проект Petalinux, а затем получите исходный код с помощью команды «petalinux-devtoolmodify».

Язык кода:javascript
копировать
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.

тестовая среда

  1. Ubuntu 18.04
  2. PetaLinux 2021.1/2022.1
  3. PetaLinux 2021.1/2022.1 ZCU106 BSP
  4. PetaLinux 2021.1/2022.1 KR260 BSP
  5. ZCU106
  6. KR260
boy illustration
[Спецификация] Результаты и исключения возврата интерфейса SpringBoot обрабатываются единообразно, поэтому инкапсуляция является элегантной.
boy illustration
Интерпретация каталога веб-проекта Flask
boy illustration
Что такое подробное объяснение файла WSDL_wsdl
boy illustration
Как запустить большую модель ИИ локально
boy illustration
Подведение итогов десяти самых популярных веб-фреймворков для Go
boy illustration
5 рекомендуемых проектов CMS с открытым исходным кодом на базе .Net Core
boy illustration
Java использует httpclient для отправки запросов HttpPost (отправка формы, загрузка файлов и передача данных Json)
boy illustration
Руководство по развертыванию Nginx в Linux (Centos)
boy illustration
Интервью с Alibaba по Java: можно ли использовать @Transactional и @Async вместе?
boy illustration
Облачный шлюз Spring реализует примеры балансировки нагрузки и проверки входа в систему.
boy illustration
Используйте Nginx для решения междоменных проблем
boy illustration
Произошла ошибка, когда сервер веб-сайта установил соединение с базой данных. WordPress предложил решение проблемы с установкой соединения с базой данных... [Легко понять]
boy illustration
Новый адрес java-библиотеки_16 топовых Java-проектов с открытым исходным кодом, достойных вашего внимания! Обязательно к просмотру новичкам
boy illustration
Лучшие практики Kubernetes для устранения несоответствий часовых поясов внутри контейнеров
boy illustration
Введение в проект удаления водяных знаков из коротких видео на GitHub Douyin_TikTok_Download_API
boy illustration
Весенние аннотации: подробное объяснение @Service!
boy illustration
Пожалуйста, не используйте foreach для пакетной вставки в MyBatis. Для 5000 фрагментов данных потребовалось 14 минут. .
boy illustration
Как создать проект Node.js с помощью npm?
boy illustration
Mybatis-plus использует typeHandler для преобразования объединенных строк String в списки списков.
boy illustration
Не удалось установить программное обеспечение Mitsubishi. Возможно, возникла проблема с реестром.
boy illustration
Разрешение ошибок проекта SpringBoot 3 mybatis-plus: org.apache.ibatis.binding.BindingException: неверный оператор привязки
boy illustration
Более краткая проверка параметров. Для проверки параметров используйте SpringBoot Validation.
boy illustration
Поиграйтесь с интеграцией Spring Boot (платформа запланированных задач Quartz)
boy illustration
Несколько популярных режимов интерфейса API: RESTful, GraphQL, gRPC, WebSocket, Webhook.
boy illustration
Redis: практика публикации (pub) и подписки (sub)
boy illustration
Подробное объяснение пакета Golang Context
boy illustration
Краткое руководство: создайте свое первое приложение .NET Aspire
boy illustration
Краткое обсуждение метода пакетной вставки MyBatis: обработка 100 000 фрагментов данных занимает всего 2 секунды.
boy illustration
[Инструмент] Используйте nvm для управления переключением версий nodejs, это так здорово!
boy illustration
HTML можно преобразовать в word_html для отображения текстовых документов.