NXP官方yocto学习

        使用yocto平台搭建IMX8QXP开发环境,学习yocto编译开发环境。

环境准备

        Ubuntu 16.04 工具软件

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev
sudo apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc
sudo apt-get install uboot-mkimage
sudo apt-get install u-boot-tools
sudo apt-get install libncurses5-dev
mkdir ~/bin (this step may not be needed if the bin folder already exists)
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

        git配置

git config --global user.name "Your Name"
git config --global user.email "Your Email"
git config --list

        下载NXP yocto源码

mkdir imx-yocto-bsp
cd imx-yocto-bsp
repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.78-1.0.0_ga.xml
repo sync

        代码目录树

.
├── fsl-setup-release.sh -> sources/meta-fsl-bsp-release/imx/tools/fsl-setup-release.sh
├── README -> sources/base/README
├── README-IMXBSP -> sources/meta-fsl-bsp-release/imx/README
├── setup-environment -> sources/base/setup-environment
└── sources
    ├── base
    ├── meta-browser
    ├── meta-freescale
    ├── meta-freescale-3rdparty
    ├── meta-freescale-distro
    ├── meta-fsl-bsp-release
    ├── meta-openembedded
    ├── meta-qt5
    └── poky

编译流程

        查看yocto版本,也是看poky版本

sources/poky/meta-poky/conf/distro/poky.conf
	DISTRO = "poky"
	DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
	DISTRO_VERSION = "2.5.1"
	DISTRO_CODENAME = "sumo"

 NXP官方yocto学习NXP官方yocto学习NXP官方yocto学习

DISTRO=fsl-imx-wayland MACHINE=imx8qxpmek source fsl-setup-release.sh -b build_imx8qxp

        环境设置脚本

fsl-setup-release.sh
	. sources/meta-fsl-bsp-release/imx/tools/setup-utils.sh
		提供4个函数
		file_override
		machine_overrides
		bbclass_overrides
		hook_in_layer
			shift
			
	PROGNAME="setup-environment"【sources/base/setup-environment】
	OLD_OPTIND=$OPTIND【getopts命令自动产生两个变量OPTIND和OPTARG】【OPTIND下一个待处理的参数的索引】【OPTARG是当getopts获取到其期望的参数后存入的位置】
	getopts "k:r:t:b:e:gh"
	$OPTARG【只接收-b -h,其他报错返回】
	
	FSLDISTRO="$DISTRO"	【默认是fsl-imx-xwayland】
	BUILD_DIR='build'   【默认是build】
	MACHINE='imx6qpsabresd'【默认是imx6qpsabresd】

	cp sources/meta-fsl-bsp-release/imx/EULA.txt sources/meta-freescale/EULA
	
	MACHINE=$MACHINE . ./$PROGNAME $BUILD_DIR
	MACHINE=imx8qxpmek . ./setup-environment build_imx8qxp
	setup-environment
		PROGNAME="setup-environment"
		- To create a new Yocto build directory:
		  $ MACHINE=imx6qdlsabresd DISTRO=fslc-framebuffer source $PROGNAME build

		- To use an existing Yocto build directory:
		  $ source $PROGNAME build	
		
		-h|--help
		
		OEROOT=$PWD/sources/poky【默认使用poky】
		if [ -e $PWD/sources/oe-core ]; then
			OEROOT=$PWD/sources/oe-core【否则使用oe-core】
		fi

		. $OEROOT/oe-init-build-env $CWD/$1 > /dev/null
		. sources/poky/oe-init-build-env ./build_imx8qxp

		oe-init-build-env
			export OEROOT
			. $OEROOT/scripts/oe-buildenv-internal &&
				TEMPLATECONF="$TEMPLATECONF" $OEROOT/scripts/oe-setup-builddir || {
				unset OEROOT
				return 1
			}

			oe-buildenv-internal
				# Make sure our paths are at the beginning of $PATH【设置bitbake环境变量】
				for newpath in "$BITBAKEDIR/bin" "$OEROOT/scripts"; do
					# Remove any existences of $newpath from $PATH
					PATH=$(echo $PATH | sed -re "s#(^|:)$newpath(:|$)#\2#g;s#^:##")

					# Add $newpath to $PATH
					PATH="$newpath:$PATH"
				done		
			oe-setup-builddir
				mkdir -p "$BUILDDIR/conf"
	
	echo "" >> $BUILD_DIR/conf/bblayers.conf
	echo "# i.MX Yocto Project Release layers" >> $BUILD_DIR/conf/bblayers.conf
	hook_in_layer meta-fsl-bsp-release/imx/meta-bsp
	hook_in_layer meta-fsl-bsp-release/imx/meta-sdk

	echo "" >> $BUILD_DIR/conf/bblayers.conf
	echo "BBLAYERS += \" \${BSPDIR}/sources/meta-browser \"" >> $BUILD_DIR/conf/bblayers.conf
	echo "BBLAYERS += \" \${BSPDIR}/sources/meta-openembedded/meta-gnome \"" >> $BUILD_DIR/conf/bblayers.conf
	echo "BBLAYERS += \" \${BSPDIR}/sources/meta-openembedded/meta-networking \"" >> $BUILD_DIR/conf/bblayers.conf
	echo "BBLAYERS += \" \${BSPDIR}/sources/meta-openembedded/meta-python \"" >> $BUILD_DIR/conf/bblayers.conf
	echo "BBLAYERS += \" \${BSPDIR}/sources/meta-openembedded/meta-filesystems \"" >> $BUILD_DIR/conf/bblayers.conf

	echo "BBLAYERS += \" \${BSPDIR}/sources/meta-qt5 \"" >> $BUILD_DIR/conf/bblayers.conf

        DISTRO参数

Here are the list of DISTRO configurations. Note that DirectFB is no longer supported, and fsl-imx-wayland and fsl-imx-fb
are not supported on i.MX 8.
• fsl-imx-x11 - X11 graphics are not supported on i.MX 8.
• fsl-imx-wayland - Wayland weston graphics.
• fsl-imx-xwayland - Wayland graphics and X11. X11 applications using EGL are not supported.
• fsl-imx-fb - Frame Buffer graphics - no X11 or Wayland. Frame Buffer is not supported on i.MX 8.
DISTRO:
	meta-fsl-bsp-release/imx/meta-sdk/conf/distro/
		fsl-imx-fb.conf
		fsl-imx-x11.conf
		fsl-imx-xwayland.conf【default】
		imx-wayland-ivi.conf
		fsl-imx-wayland.conf:
			# i.MX DISTRO for Wayland without X11

			include conf/distro/include/fsl-imx-base.inc
			include conf/distro/include/fsl-imx-preferred-env.inc

			DISTRO = "fsl-imx-wayland"

			# Remove conflicting backends
			DISTRO_FEATURES_remove = "directfb x11 "
			DISTRO_FEATURES_append = " wayland pam systemd"
	
		meta-fsl-bsp-release/imx/meta-sdk/conf/distro/include
			fsl-imx-base.inc  
				DISTRO = "fsl-imx"
				DISTRO_NAME = "NXP i.MX Release Distro"
				DISTRO_VERSION = "4.14-sumo"

				DISTRO_CODENAME = "sumo"
				SDK_VENDOR = "-pokysdk"
				SDK_VERSION := "${DISTRO_VERSION}"
				#SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
				
				IMX_DEFAULT_DISTRO_FEATURES = "largefile opengl ptest multiarch bluez"
				# Enable vulkan distro feature only for mx8
				IMX_DEFAULT_DISTRO_FEATURES_append_mx8 = " vulkan"
				IMX_DEFAULT_EXTRA_RDEPENDS = "packagegroup-core-boot"
				IMX_DEFAULT_EXTRA_RRECOMMENDS = "kernel-module-af-packet"
				IMAGE_FSTYPES = "tar.bz2 ext4 sdcard.bz2"			
				
			fsl-imx-preferred-env.inc
				# Use i.MX Kernel, U-Boot and Gstreamer 1.0 providers
				PREFERRED_PROVIDER_virtual/bootloader_imx = "u-boot-imx"	
				PREFERRED_PROVIDER_virtual/kernel_imx = "linux-imx"
				PREFERRED_VERSION_linux-libc-headers_imx = "4.14"

				DEFAULTTUNE_mx8 = "aarch64"

				# Use systemd as default init manager
				VIRTUAL-RUNTIME_init_manager = "systemd"
				PREFERRED_PROVIDER_udev = "systemd"
				PREFERRED_PROVIDER_udev-utils = "systemd"
				DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
				IMX_DEFAULT_DISTRO_FEATURES += " systemd"

				UBOOT_MAKE_TARGET_mx6ul = "u-boot.imx"

        MACHINE参数

MACHINE:
	meta-fsl-bsp-release/imx/meta-bsp/conf/machine/
		imx6dlsabreauto.conf
		imx7dsabresd.conf
		imx8qxpmek.conf	:
			MACHINEOVERRIDES =. "mx8:mx8qxp:"

			require conf/machine/include/imx-base.inc
			require conf/machine/include/arm/arch-arm64.inc

			SERIAL_CONSOLE = "115200 ttyAMA0"

			KERNEL_DEVICETREE = "freescale/fsl-imx8qxp-mek.dtb freescale/fsl-imx8qxp-mek-dom0.dtb"
			UBOOT_MAKE_TARGET = "u-boot.bin"
			UBOOT_SUFFIX = "bin"
			UBOOT_CONFIG ??= "sd"
			UBOOT_CONFIG[sd] = "imx8qxp_mek_config,sdcard"
			UBOOT_CONFIG[fspi] = "imx8qxp_mek_fspi_defconfig"

			BOOT_SPACE = "65536"
			IMAGE_BOOTLOADER = "imx-boot"
			IMX_BOOT_SEEK = "32"

			IMXBOOT_TARGETS = "${@bb.utils.contains('UBOOT_CONFIG', 'fspi', 'flash_flexspi', \
																			'flash_all flash', d)}"
			BOARD_TYPE = "mek"

		genvict_imx8qxp.conf:
			KERNEL_DEVICETREE = "freescale/fsl-imx8qxp-mek.dtb"
			UBOOT_CONFIG ??= "emmc"
			UBOOT_CONFIG[emmc] = "imx8qxp_mek_config,sdcard"

        编译环境配置后

build_imx8qxp/conf/bblayers.conf【带conf/layer.conf层配置的目录文件】
	LCONF_VERSION = "6"

	BBPATH = "${TOPDIR}"
	BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"

	BBFILES ?= ""
	BBLAYERS = " \
	  ${BSPDIR}/sources/poky/meta \
	  ${BSPDIR}/sources/poky/meta-poky \
	  \
	  ${BSPDIR}/sources/meta-openembedded/meta-oe \
	  ${BSPDIR}/sources/meta-openembedded/meta-multimedia \
	  \
	  ${BSPDIR}/sources/meta-freescale \
	  ${BSPDIR}/sources/meta-freescale-3rdparty \
	  ${BSPDIR}/sources/meta-freescale-distro \
	"

	# i.MX Yocto Project Release layers
	BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-bsp "
	BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-sdk "

	BBLAYERS += " ${BSPDIR}/sources/meta-browser "
	BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-gnome "
	BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-networking "
	BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-python "
	BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-filesystems "
	BBLAYERS += " ${BSPDIR}/sources/meta-qt5 "
build_imx8qxp/conf/local.conf
	MACHINE ??= 'imx8qxpmek'
	DISTRO ?= 'fsl-imx-wayland'
	PACKAGE_CLASSES ?= "package_rpm"
	EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
	USER_CLASSES ?= "buildstats image-mklibs image-prelink"
	PATCHRESOLVE = "noop"
	BB_DISKMON_DIRS ??= "\
		STOPTASKS,${TMPDIR},1G,100K \
		STOPTASKS,${DL_DIR},1G,100K \
		STOPTASKS,${SSTATE_DIR},1G,100K \
		STOPTASKS,/tmp,100M,100K \
		ABORT,${TMPDIR},100M,1K \
		ABORT,${DL_DIR},100M,1K \
		ABORT,${SSTATE_DIR},100M,1K \
		ABORT,/tmp,10M,1K"
	PACKAGECONFIG_append_pn-qemu-native = " sdl"
	PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
	CONF_VERSION = "1"

	DL_DIR ?= "${BSPDIR}/downloads/"
	ACCEPT_FSL_EULA = "1"

编译完成后

        bitbake fsl-image-validation-imx

Welcome to Freescale Community BSP

The Yocto Project has extensive documentation about OE including a
reference manual which can be found at:
    http://yoctoproject.org/documentation

For more information about OpenEmbedded see their website:
    http://www.openembedded.org/

You can now run 'bitbake <target>'

Common targets are:
    core-image-minimal
    meta-toolchain
    meta-toolchain-sdk
    adt-installer
    meta-ide-support

Your build environment has been configured with:

    MACHINE=imx8qxpmek
    SDKMACHINE=i686
    DISTRO=fsl-imx-wayland
    EULA=
BSPDIR=
BUILD_DIR=.
meta-freescale directory found

上一篇:安卓源码分析之设置页面注释某一项


下一篇:2021-06-13