首先准备好Yocto的开发环境,具体可参考 http://w.g77k.com/Yocto_Project
然后要准备好iMX6开发版的内核、模块、Firmware以及头文件。
进入开发环境的目录,用编辑器编辑sources/meta-fsl-demos/recipes-fsl/images/luna-image-gui-dev.bb,写入以下内容
include recipes-sato/images/core-image-sato.bb
IMAGE_FEATURES += "debug-tweaks dbg-pkgs dev-pkgs tools-sdk tools-debug tools-profile tools-testapps"
DISTRO_FEATURES += "pulseaudio"
WEB = "web-webkit"
SOC_EXTRA_IMAGE_FEATURES ?= "tools-testapps"
# Add extra image features
EXTRA_IMAGE_FEATURES += " \
${SOC_EXTRA_IMAGE_FEATURES} \
tools-debug \
tools-profile \
qt4-pkgs \
"
SOC_IMAGE_INSTALL = ""
SOC_IMAGE_INSTALL_mx5 = "glcubes-demo"
IMAGE_INSTALL += " \
${SOC_IMAGE_INSTALL} \
cpufrequtils \
nano \
packagegroup-fsl-gstreamer \
packagegroup-fsl-tools-testapps \
packagegroup-fsl-tools-benchmark \
packagegroup-qt-in-use-demos \
qt4-plugin-phonon-backend-gstreamer \
fsl-gui-extrafiles \
openbox \
libav \
git \
"
export IMAGE_BASENAME = "luna-image-gui-dev"
编辑build/conf/local.conf,修改为以下内容
MACHINE ??= 'imx6qsabresd'
DISTRO ?= 'poky'
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES = "debug-tweaks dbg-pkgs dev-pkgs tools-sdk tools-debug"
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 \
ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K"
CONF_VERSION = "1"
BB_NUMBER_THREADS = '24'
PARALLEL_MAKE = '-j 24'
DL_DIR ?= "${BSPDIR}/downloads/"
ACCEPT_FSL_EULA = "1"
LICENSE_FLAGS_WHITELIST = "commercial"
编辑build/conf/bblayers.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-yocto \
\
${BSPDIR}/sources/meta-openembedded/meta-oe \
\
${BSPDIR}/sources/meta-fsl-arm \
${BSPDIR}/sources/meta-fsl-arm-extra \
${BSPDIR}/sources/meta-fsl-demos \
"
##Freescale Yocto Release layer
BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-fsl-arm "
BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-fsl-demos "
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-multimedia "
#BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-xfce
进入build目录,执行命令bitbake luna-image-gui-dev,运行完成后可在tmp/deploy/images/imx6qsabresd找到luna-image-gui-dev-imx6qsabresd.tar.bz2,将其解压到SD卡上作为rootfs使用,并将之前准备好的内核模块、Firmware以及头文件包解压到对应目录。
因为GStreamer 0.10对MPEGTS的支持不佳,因此我们需要使用GStreamer 1.0,这里使用的是GStreamer 1.2.2,gstreamer-imx需要1.2或以上的版本才能编译。
先从之前编译rootfs完成后的tmp/deploy/rpm/cortexa9hf_vfp_neon下获取以下.rpm文件:
alsa-dev-1.0.27.2-r1.cortexa9hf_vfp_neon.rpm alsa-lib-dev-1.0.27.2-r1.cortexa9hf_vfp_neon.rpm libglib-2.0-utils-2.36.4-r0.cortexa9hf_vfp_neon.rpm libfaad2-2.7-r1.cortexa9hf_vfp_neon.rpm libfaad-dev-2.7-r1.cortexa9hf_vfp_neon.rpm faad2-dev-2.7-r1.cortexa9hf_vfp_neon.rpm faad2-2.7-r1.cortexa9hf_vfp_neon.rpm libmad0-0.15.1b-r3.cortexa9hf_vfp_neon.rpm libmad-dev-0.15.1b-r3.cortexa9hf_vfp_neon.rpm使用rpm -ivh (rpm file)来安装它们(注意要按顺序安装) 下载以下文件
http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.2.2.tar.xz http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.2.2.tar.xz http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.2.2.tar.xz http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.2.2.tar.xz http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.2.2.tar.xz依次解压它们,并进入其目录,执行以下命令 ./autogen.sh --prefix=/usr --disable-gtk-doc --disable-examples make -j6 make install 如果没有错误就说明正常安装完成了 安装gstreamer-imx (https://github.com/Freescale/gstreamer-imx) git clone https://github.com/Freescale/gstreamer-imx.git (开发板上的系统可能不能正常运行git命令,可从其网站上获取tar.gz包来使用) 使用以下命令来编译 (务必准备好内核头文件) ./waf configure --prefix=/usr --kernel-headers=/usr/src/linux/include ./waf -j6 ./waf install 没有出现错误的话即安装完成 最后可以使用 DISPLAY=:0.0 gst-launch-1.0 playbin uri=udp://225.0.0.1:2001 video-sink=imxeglvivsink 来测试GStreamer是否能正常使用硬件解码工作(需要当前局域网内有视频流服务器)。