## Flexbuild использование
$ cd flexbuild
$ source setup.env
$ flex-builder -h
Использование:
flex-builder -c <component> [-a <arch>] [-f <config-file>]
or:
flex-builder -i <instruction> [-m <machine>] [-a <arch>] [-r <distro_type>:<distro_scale>] [-f <cfg>]
Наиболее используемый пример с автоматической сборкой:
flex-builder -m ls1043ardb # automatically build all firmware, linux, apps components and ubuntu-based rootfs for single ls1043ardb
flex-builder -i auto # automatically build all firmware, linux, apps components and ubuntu-based rootfs for all arm64 machines
Наиболее используемый пример с отдельной командой:
flex-builder -i mkfw -m <machine> # generate composite firmware (contains atf, u-boot, peripheral firmware, kernel, dtb, tinylinux rootfs, etc)
flex-builder -i mkallfw # generate composite firmware for all arm64 machines
flex-builder -i mkrfs # generate Ubuntu main arm64 userland, equivalent to "-i mkrfs -r ubuntu:main -a arm64" by default
flex-builder -i mkrfs -r ubuntu:desktop # generate Ubuntu desktop arm64 userland
flex-builder -i mkrfs -r ubuntu:lite # generate Ubuntu lite arm64 userland
flex-builder -i mkrfs -r yocto:tiny # generate Yocto-based arm64 tiny userland
flex-builder -i mkrfs -r buildroot:tiny # generate Buildroot-based arm64 tiny userland
flex-builder -i mkrfs -r centos # generate CentOS arm64 userland
flex-builder -i mkitb -r yocto:tiny # generate lsdk_yocto_tiny_LS_arm64.itb including rootfs_<sdk_version>_yocto_tiny_arm64.cpio.gz
flex-builder -c <component> # compile <component> or <subsystem> (e.g. dpdk,weston,linux,networking,graphics,security,etc)
flex-builder -c linux # compile linux kernel for all arm64 machines, equivalent to "-i compile -c linux -a arm64" by default
flex-builder -c atf -m ls1046ardb -b sd # compile atf image for SD boot on LS1046ardb
flex-builder -i mkboot # generate boot partition tarball (contains kernel, dtb, modules, distro boot script, etc) for deployment
flex-builder -i merge-component # merge component packages into target arm64 userland
flex-builder -i packrfs # pack and compress target rootfs as rootfs_<sdk_version>_ubuntu_main_arm64.tgz
flex-builder -i packapp # pack and compress target app components as app_components_LS_arm64.tgz
flex-builder -i download -m ls1043ardb # download prebuilt distro images for specific machine
flex-builder -i repo-fetch # fetch all git repositories of components from remote repos if not exist locally
flex-builder -i repo-update # update all components to the latest TOP commmits of current branches
flex-builder -i mkdistroscr # generate distro boot script
flex-builder docker # create or attach Ubuntu docker container to run flex-builder in docker
flex-builder clean # clean all obsolete firmware/linux/apps image except distro rootfs
flex-builder clean-rfs # clean distro rootfs, '-r ubuntu:main -a arm64' by default
flex-builder clean-firmware # clean obsolete firmware image
flex-builder clean-apps # clean obsolete apps component binary image
flex-builder clean-linux # clean obsolete linux image
Поддерживаемые варианты:
-m, --machine целевая машина, поддерживает ls1012afrwy,ls1021atwr,ls1028ardb,ls1043ardb,ls1046ardb,ls2088ardb,lx2160ardb_rev2,lx2162aqds,imx8mnevk,imx8mpevk,etc
-a, --arch целевая архитектура, действительный аргумент: arm64, arm64:be, arm32, arm32:be, ppc64, ppc32, Arm64 по умолчанию, если не указано
-b, --boottype тип загрузочного носителя, допустимый аргумент: sd, emmc, qspi, xspi, nor, nand, по умолчанию все типы, если не указано
-c, --component скомпилировать указанную подсистему или компонент, например: firmware, apps, linux, networking, graphics, security, atf, rcw, uboot, dpdk, ovs_dpdk, vpp, fmc, tsntool, weston, xserser, armnn, tflite, etc
-i, --instruction инструкция для конкретной цели, действительный аргумент, как показано ниже:
mkfw создать составную прошивку (contains atf, u-boot, peripheral firmware, kernel, dtb, tinylinux rootfs, etc)
mkallfw генерировать составную прошивку для всех платформ
mkitb generate <sdk_version>_<distro_type>_<distro_scale>_<portfolio>_<arch>.itb
mkboot generate boot partition tarball (contains kernel, modules, dtb, distro boot script, secure boot header, etc)
mkrfs generate target rootfs, associated with -r, -a and -p options for different distro type and architecture
mkdistroscr generate distro autoboot script for all or single machine
mkflashscr generate U-Boot script of flashing images for all machines
signimg sign various images and generate secure boot header for the specified machine
merge-component merge custom component packages and kernel modules into target distro rootfs
auto automatically build all firmware, kernel, apps components and distro userland
clean clean all the obsolete images except distro rootfs
clean-firmware clean obsolete firmware images generated in build/firmware directory
clean-linux clean obsolete linux images generated in build/linux directory
clean-apps clean obsolete apps images
clean-rfs clean target rootfs
packrfs pack and compress distro rootfs as .tgz
packapps pack and compress apps components as .tgz
repo-fetch fetch single or all git repositories if not exist locally
repo-branch set single or all git repositories to specified branch
repo-update update single or all git repositories to latest HEAD
repo-commit set single or all git repositories to specified commit
repo-tag set single or all git repositories to specified tag
rfsraw2ext convert raw rootfs to ext4 rootfs
list list enabled config, machines and components
-p, --portfolio specify portfolio of SoC, valid argument: LS or IMX, default LS if unspecified
-f, --cfgfile specify config file, configs/sdk.yml is used by default if only the file exists
-B, --buildarg secondary argument for various build commands
-r, --rootfs specify flavor of target rootfs, valid argument: ubuntu|debian|centos|yocto|buildroot:main|desktop|devel|lite|tiny
-j, --jobs number of parallel build jobs, default 16 jobs if unspecified
-s, --secure enable security feature in case of secure boot without IMA/EVM
-t, --ima-evm enable IMA/EVM feature in case of secure boot with IMA/EVM
-T, --cot specify COT (Chain of Trust) type for secure boot, valid argument: arm-cot, arm-cot-with-verified-boot, nxp-cot
-e, --encapsulation enable encapsulation and decapsulation feature for chain of trust with confidentiality in case secure boot
-v, --version print the version of flexbuild
-h, --help print help info
## Как собрать композитную прошивку
Составная прошивка состоит из RCW/PBL, ATF BL2, ATF BL31, BL32 OPTEE, BL33 U-Boot/UEFI, переменных среды загрузчика,
безопасные загрузочные заголовки, прошивка Ethernet, dtb, ядро и крошечный initrd rootfs и т. д., эту составную прошивку можно запрограммировать на
смещение 0x0 во флэш-устройстве NOR/QSPI/FlexSPI или смещение 4 КБ (LS) или 1 КБ/32 КБ/33 КБ (I.MX) на карте SD/eMMC.
Использование:
flex-builder -i mkfw -m <machine> [-b <boottype>]
Использование:
$ flex-builder -i mkfw -m ls1046ardb # generate all boot types composite firmware_ls1046ardb_<boottype>.img
$ flex-builder -i mkfw -m ls1046ardb -b sd # generate specified boot type composite firmware_ls1046ardb_sdboot.img
$ flex-builder -i mkfw -m imx6qsabresd # generate composite firmware_imx6qsabresd_sdboot.img
$ flex-builder -i mkfw -m imx8mpevk # generate composite firmware_imx8mpevk_sdboot.img
## Как собрать архив загрузочного раздела
Usage: flex-builder -i <instruction> [ -p <portfolio> ] [ -a <arch> ]
Использование:
$ flex-builder -i mkboot # generate boot_LS_arm64_lts_5.10.tgz for arm64 Layerscape platforms
$ flex-builder -i mkboot -a arm32 # generate boot_LS_arm32_lts_5.10.tgz for arm32 Layerscape platforms
$ flex-builder -i mkboot -p IMX # generate boot_IMX_arm64_lts_5.10.tgz for arm64 iMX platforms
$ flex-builder -i mkboot -p IMX -a arm32 # generate boot_IMX_arm32_lts_5.10.tgz for arm32 iMX platforms
## Как собрать образ Linux ITB FIT
$ flex-builder -i mkitb -r yocto:tiny # generate yocto-based tiny <sdk_version>_yocto_tiny_LS_arm64.itb
$ flex-builder -i mkitb -r yocto:tiny -a arm32 # generate yocto-based tiny <sdk_version>_yocto_tiny_LS_arm32.itb
$ flex-builder -i mkitb -r ubuntu:lite # generate Ubuntu-based lite <sdk_version>_ubuntu_lite_LS_arm64.itb
$ flex-builder -i mkitb -r yocto:tiny -p IMX # generate yocto-based tiny <sdk_version>_yocto_tiny_IMX_arm64.itb
$ flex-builder -i mkitb -r ubuntu:lite -p IMX # generate ubuntu-based lite <sdk_version>_ubuntu_lite_IMX_arm64.itb
## Как собрать ядро и модули Linux
Чтобы собрать Linux с репозиторием по умолчанию и текущей веткой в соответствии с конфигурацией по умолчанию
Использование:
flex-builder -c linux [ -a <arch> ] [ -p <portfolio> ]
Примеры:
$ flex-builder -c linux # for arm64 Layerscape platforms by default
$ flex-builder -c linux -a arm32 # for arm32 Layerscape platform
$ flex-builder -c linux -a arm64 -p IMX # for arm64 i.MX platforms
$ flex-builder -c linux -a arm32 -p IMX # for arm32 i.MX platforms
Чтобы собрать Linux с указанным репозиторием ядра и веткой/тегом в соответствии с конфигурацией ядра по умолчанию.
Использование:
flex-builder -c linux:<kernel_repo>:<branch|tag|commit> [ -a <arch> ]
Примеры:
$ flex-builder -c linux:linux-lts-nxp:lf-5.10.y
$ flex-builder -c linux:linux:LSDK-21.08
Чтобы настроить параметры ядра с помощью репозитория по умолчанию и текущей ветки в интерактивном меню.
$ flex-builder -c linux:custom # generate a customized .config
$ flex-builder -c linux # compile kernel and modules according to the generated .config above
Чтобы собрать собственный Linux с указанным репозиторием ядра и веткой/тегом в соответствии с конфигурацией по умолчанию и конфигурацией добавленного фрагмента.
Использование:
flex-builder -c linux [ :<kernel_repo>:<tag|branch> ] -B fragment:<xx.config> [ -a <arch> ]
Examples:
$ flex-builder -c linux -B fragment:ima_evm_arm64.config
$ flex-builder -c linux -B fragment:"ima_evm_arm64.config lttng.config"
$ flex-builder -c linux:linux:LSDK-21.08 -B fragment:lttng.config
## Как собрать ATF (TF-A)
Использование:
flex-builder -c atf [ -m <machine> ] [ -b <boottype> ] [ -s ] [ -B bootloader ]
Примеры:
$ flex-builder -c atf -m ls1028ardb -b sd # build U-Boot based ATF image for SD boot on ls1028ardb
$ flex-builder -c atf -m ls1046ardb -b qspi # build U-Boot based ATF image for QSPI boot on ls1046ardb
$ flex-builder -c atf -m ls2088ardb -b nor -s # build U-Boot based ATF image for secure IFC-NOR boot on ls2088ardb
$ flex-builder -c atf -m lx2160ardb -b xspi -B uefi # build UEFI based ATF image for FlexSPI-NOR boot on lx2160ardb
flex-builder может автоматически создавать зависимые RCW, U-Boot/UEFI, OPTEE и CST перед сборкой ATF для создания целевых образов.
Примечание 1.
Если вы хотите указать другую конфигурацию RCW вместо конфигурации по умолчанию, сначала измените переменную rcw_<boottype> в configs/board/<machine>/manifest,
затем запустите "flex-builder -c rcw -m <machine>", чтобы сгенерировать новый образ RCW.
Примечание 2.
Опция "-s" используется для безопасной загрузки.
FUSE_PROVISIONING не включен по умолчанию, вы можете изменить CONFIG_FUSE_PROVISIONING:n — y в configs/sdk.yml, чтобы включить его при необходимости.
## Как собрать U-Boot
Использование:
flex-builder -c uboot -m <machine>
Примеры:
$ flex-builder -c uboot -m ls2088ardb # build U-Boot image for ls2088ardb
$ flex-builder -c uboot -m imx6qsabresd # build U-Boot image for imx6qsabresd
$ flex-builder -c uboot -m imx8mpevk # build U-Boot image for imx8mpevk
## Как собрать различные компоненты прошивки
Использование:
flex-builder -c <component> [ -b <boottype> ]
Примеры:
$ flex-builder -c rcw -m ls1046ardb # build RCW images for ls1046ardb
$ flex-builder -c mc_utils # build mc_utils image
$ flex-builder -c bin_firmware # build binary fm_ucode, qe_ucode, mc_bin, phy_cortina, pfe_bin, etc
## Как создавать компоненты приложения
Поддерживаемые компоненты приложения: restool, tsntool, gpp_aioptool, dpdk, pktgen_dpdk, ovs_dpdk, flib, fmlib, fmc, spc, openssl, cst, aiopsl,
ceetm, qbman_userspace, eth_config, crconf, optee_os, optee_client, optee_test, libpkcs11, secure_obj, eiq, opencv, tflite, ArmCL,
Flatbuffer, onnx, onnxruntime и т. д.
Использование:
flex-builder -c <component> [ -a <arch> ] [ -r <distro_type>:<distro_scale> ]
Примеры:
$ flex-builder -c apps # build all apps components against arm64 Ubuntu main userland by default
$ flex-builder -c apps -r yocto:devel # build apps components against arm64 Yocto-based userland
$ flex-builder -c apps -r buildroot:devel # build all apps components against arm64 buildroot-based userland
$ flex-builder -c fmc -a arm64 # build FMC component against arm64 Ubuntu main userland
$ flex-builder -c fmc -a arm32 # build FMC component against arm32 Ubuntu main userland
$ flex-builder -c dpdk -r ubuntu:main # build DPDK component against Ubuntu main userland
$ flex-builder -c dpdk -r yocto:devel # build DPDK component against Yocto devel userland
$ flex-builder -c weston -r ubuntu:desktop # build weston component
$ flex-builder -c xserver -r ubuntu:desktop # build xserver component
$ flex-builder -c optee_os # build optee_os component
$ flex-builder -c tflite # build tensorflow lite
(примечание: '-r ubuntu:main -a arm64' используется по умолчанию, если не указано.)
## Управление git-репозиториями различных компонентов.
Использование:
flex-builder -i <instruction> [ -B <args> ]
Примеры:
$ flex-builder -i repo-fetch # git clone source repositories of all components
$ flex-builder -i repo-fetch -c dpdk # git clone source repository for DPDK
$ flex-builder -i repo-branch # switch branches of all components to specified branches according to the config file
$ flex-builder -i repo-tag # switch tags of all components to specified tags according to default config
$ flex-builder -i repo-commit # set all components to the specified commmits of current branches
$ flex-builder -i repo-update # update all components to the latest HEAD commmit of current branches
## Как использовать другую конфигурацию сборки вместо конфигурации по умолчанию
Пользователь может создать собственный файл конфигурации "configs/custom.yml", flex-builder предпочтительно выберет custom.yml, в противном случае,
если он есть это файл конфигурации "configs/sdk_internal.yml", он будет использоваться.
Если есть только "configs/sdk.yml", он будет использован.
Если в каталоге configs имеется несколько файлов конфигурации, пользователь может указать ожидаемый файл, указав опцию "-f <cfg>".
Пример:
$ flex-builder -m ls1043ardb -f custom.yml
$ flex-builder -m ls1028ardb -f test.yml
$ flex-builder -m imx8mpevk -f sdk.yml
##Как добавить новый компонент/пакет приложения в Flexbuild
- Добавьте новое "<имя_приложения>: y" в CONFIG_APP и настройте url/branch/tag репозитория в "configs/sdk.yml",
Пользователь может напрямую создать новый репозиторий компонентов git в каталоге компоненты/приложения/<категория> до того, как новый репозиторий git будет готов.
- Добавлена поддержка объектов makefile для нового компонента в "packages/apps/<category>/<component>.mk".
- Запустите 'flex-builder -c <компонент> -r <distro_type:distro_scale> -a <arch>', чтобы создать новый компонент на основе целевой корневой файловой системы <arch>.
- Запустите 'flex-builder -i merge-comment -r <distro_type:distro_scale> -a <arch>', чтобы объединить новый пакет компонентов с целевой корневой файловой системой <arch>.
- Запустите 'flex-builder -i packagerfs -r <distro_type:distro_scale> -a <arch>', чтобы упаковать целевую корневую файловую систему <arch>.
(примечание: '-r ubuntu:main -a Arm64' используется по умолчанию, если не указано)
## Как настроить различные пути к пакетам/компонентам и пути вывода изображений вместо пути по умолчанию для совместного использования несколькими пользователями.
Путь к пакетам по умолчанию — <flexbuild_dir>/packages, путь вывода изображений по умолчанию — <flexbuild_dir>/build. Существует два способа
измените путь по умолчанию:
Способ 1:
установите PACKAGES_PATH и/или FBOUTDIR в переменной среды(environment variable), как показано ниже:
$ export PACKAGES_PATH=<path>
$ export FBOUTDIR=<path>
Способ 2:
изменить DEFAULT_PACKAGES_PATH и/или DEFAULT_OUT_PATH в <flexbuild_dir>/configs/sdk.yml.