Poky manual

From ElphelWiki
Revision as of 19:13, 27 January 2016 by Oleg (talk | contribs)
Jump to: navigation, search

Description

  • Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board

About

  • Yocto Poky revision = 2.0
  • Host OS = Kubuntu 14.04.3 LTS x64

Required packages

Output files

Found in the poky's deploy directory: poky/build/tmp/deploy/images/

These names are listed as they appear in the u-boot configuration header file - actual output files have different names:

  • boot.bin+(u-boot-dtb.img) - u-boot as the first stage bootloader = Secondary Program Loader that boots u-boot-dtb.img

  • devicetree.dtb - device tree with described interfaces, zynq registers, interrupts and drivers
  • uImage - kernel, drivers
  • uramdisk.image.gz - applications

Copy them on the micro SD card (FAT partition) > run boot once in the u-boot command line.

Boot options

  • Auto unpacking the root file system image to RAM when booting:
    • Check u-boot default environment variables when building the bootloader.
    • Keep uramdisk.image.gz along with all the other files on the FAT partition of (micro)SD card.
  • Root file system on EXT2(EXT3,etc.) partition of (micro)SD card.


Setup

  • Step 1: Copy the following lines to some_script.sh, modify and run:

#Part 1

git clone -b master git://git.yoctoproject.org/poky.git poky
cd poky; git checkout 3d2c0f5902cacf9d8544bf263b51ef0dd1a7218c
 
git clone -b master https://github.com/Elphel/meta-ezynq.git meta-ezynq
cd meta-ezynq; git checkout 8818b2b560245777a730d6715e2be34c9c6545bc; cd ..

git clone -b master https://github.com/Elphel/meta-elphel393.git meta-elphel393
cd meta-elphel393; git checkout 23403d8d52bacdfc1158a9ee316553dfc5edd32d; cd ..

git clone -b master https://github.com/Xilinx/meta-xilinx.git meta-xilinx
cd meta-xilinx; git checkout cc146d6c170f100eb2f445047969893faa7a6a55; cd ..

git clone -b master git://git.openembedded.org/meta-openembedded meta-openembedded
cd meta-openembedded; git checkout 3d2c0f5902cacf9d8544bf263b51ef0dd1a7218c; cd ..
#Part 2 : init environment and auto-fill Yocto's conf-files

CURRENT_PATH=$(dirname $(readlink -f "$0"))
. ./oe-init-build-env

BBLAYERS_CONF="conf/bblayers.conf"

echo "BBLAYERS = \" \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-yocto \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-yocto-bsp \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-ezynq \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-elphel393 \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-xilinx \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-openembedded/meta-oe \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-openembedded/meta-python \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-openembedded/meta-networking \\" >> $BBLAYERS_CONF
echo "  $CURRENT_PATH/meta-openembedded/meta-webserver \\" >> $BBLAYERS_CONF
echo "  \"" >> $BBLAYERS_CONF

LOCAL_CONF="conf/local.conf"

# change the MACHINE
echo "MACHINE ?= \"elphel393\"" >> $LOCAL_CONF
# Elphel's MIRROR website, \n is important
echo "MIRRORS =+ \"http://.*/.*     http://mirror.elphel.com/elphel393_mirror/ \n \"" >> $LOCAL_CONF
  • Step 2: re-init environment
cd poky
. ./oe-init-build-env
  • Step 3: build bootable image (3 targets)
bitbake u-boot-ezynq linux-xlnx core-image-elphel393

Build bootloader

bitbake u-boot-ezynq
or
bitbake u-boot
or
bitbake virtual/bootloader

Output

  • poky/build/tmp/deploy/images/boot.bin
  • poky/build/tmp/deploy/images/u-boot-dtb.img

Notes

  • Since Poky 1.5.1 switched from u-boot-xlnx to u-boot - some of the u-boot-xlnx reached the upstream
  • Since Poky 1.5.1 u-boot introduced Kconfig and currently (as of 2016/01/22) is still migrating from autoconf - keeping both build methods working together.
  • Current u-boot uses the board's device tree blob to make a stripped version for itself - uncompiled device tree files are present in the u-boot sources

Build kernel

bitbake linux-xlnx
or
bitbake virtual/kernel

Output

  • poky/build/tmp/deploy/images/.../uImage (kernel)
  • poky/build/tmp/deploy/images/.../devicetree.dtb (or some *.dtb) - currently and temporarily is built with bitbake device-tree

Notes

  • Kernel version is 4.0, linux-xlnx
  • Device Tree Blob is compiled separately in linux-xlnx
  • Uncompiled device tree files are present in the linux sources provided by linux-xlnx

Build ramdisk.image.gz

bitbake core-image-elphel393

Output

  • poky/build/tmp/deploy/images/uramdisk.image.gz (the file has *.u-boot extension after it's built)