Difference between revisions of "Poky manual"

From ElphelWiki
Jump to: navigation, search
(Setup)
Line 43: Line 43:
  
 
==<font color="blue">Setup</font>==
 
==<font color="blue">Setup</font>==
* Step 1: Copy the following lines to <b>some_script.sh</b>, modify and run:
+
*  
 
<font size='2'>
 
<font size='2'>
  '''#Part 1'''
+
  $ git clone https://github.com/Elphel/elphel393.git
+
  $ cd elphel393
git clone -b master git://git.yoctoproject.org/poky.git poky
+
  $ source setup.sh
cd poky; git checkout 3d2c0f5902cacf9d8544bf263b51ef0dd1a7218c
 
 
 
git clone -b master https://github.com/Elphel/meta-ezynq.git meta-ezynq
 
cd meta-ezynq; git checkout d3a055fc82fff990f9f2cdb8c09eb948133cf6f4; cd ..
 
 
git clone -b master https://github.com/Elphel/meta-elphel393.git meta-elphel393
 
  cd meta-elphel393; git checkout 56e3c1b7007faab1ccd4d983348b249d610165d6; 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 73854a05565b30a5ca146ac53959c679b27815aa; cd ..
 
 
'''#Part 2 : init environment and auto-fill Yocto's conf-files'''
 
CONF_NOTES="meta/conf/conf-notes.txt"
 
 
if [ -f $CONF_NOTES ]; then
 
    rm $CONF_NOTES
 
fi
 
 
echo "Common \"elphel393\" targets are:" >> $CONF_NOTES
 
echo "    u-boot" >> $CONF_NOTES
 
echo "    device-tree" >> $CONF_NOTES
 
echo "    linux-xlnx" >> $CONF_NOTES
 
echo "    core-image-elphel393" >> $CONF_NOTES
 
 
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"
 
 
# <font color='red'>change the MACHINE</font>
 
echo "MACHINE ?= \"'''elphel393'''\"" >> $LOCAL_CONF
 
  # <font color='red'>Elphel's MIRROR website, '''\n''' is important</font>
 
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 device-tree linux-xlnx core-image-elphel393
 
 
</font>
 
</font>
  

Revision as of 16:25, 14 April 2016

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:

  • files for rootfs in NAND Flash: poky/build/tmp/deploy/images/elphel393/nand/
  • files for rootfs on MMC (micro SD card): poky/build/tmp/deploy/images/elphel393/mmc/

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

  • boot.bin - u-boot as the first stage bootloader = Secondary Program Loader that boots u-boot-dtb.img
  • u-boot-dtb.img - full size u-boot with a stripped device tree (cat u-boot.img some_stripped_devicetree.dtb > u-boot-dtb.img)
  • devicetree.dtb - device tree with listed interfaces, zynq registers, interrupts and drivers
  • uImage - kernel, drivers
  • rootfs.ubifs or rootfs.tar.gz - rootfs

Boot options

Boot from micro SD card (rootfs)

  • The micro SD card/adapter must be modified for this boot mode (to keep CD pin high) - only then the camera will boot
  • EXT4 partition mounted as /
  • Detailed instructions

Boot from NAND flash (rootfs)

  • The default boot option - power on.
  • A UBIFS image is written to /dev/mtd4 - is mounted as /
  • Detailed instructions

Notes

  • It is possible to unpack rootfs to RAM not mounting any partitions (/ in RAM, ramdisk):
    • Changes are not stored
    • Boot faster?
    • Work faster?
    • Modify env commands in the u-boot (in elphel393.h or when in the u-boot command line)
    • Carefully check the actual and hardcoded images' sizes in the u-boot (elphel393.h) and the device tree (elphel393_xxx.dts) with the actual sizes.

Setup

$ git clone https://github.com/Elphel/elphel393.git
$ cd elphel393
$ source setup.sh

Build bootloader

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

Output

  • poky/build/tmp/deploy/images/<machine>/boot.bin
  • poky/build/tmp/deploy/images/<machine>/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

Compile devicetree

bitbake device-tree

Output

  • poky/build/tmp/deploy/images/<machine>/devicetree.dtb

Build kernel

bitbake linux-xlnx
or
bitbake virtual/kernel

Output

  • poky/build/tmp/deploy/images/<machine>/uImage (kernel)

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/<machine>/uramdisk.image.gz (the file has *.u-boot extension after it's built)


Notes

  • [FIXED] lighttpd-1.4.39, mod-cgi

compile warning:

implicit declaration of function 'chunkqueue_written'

results in lighttpd failing to start if mod-cgi is enabled:

Starting Lighttpd Web Server: 2016-01-26 18:42:17: (/data/GIT_fresh/poky/build/tmp/work/cortexa9-vfp-neon-poky-linux-gnueabi/lighttpd/1.4.36-r0/lighttpd-1.4.36/src/plugin.c.169) dlopen() failed for: /usr/lib/mod_cgi.so /usr/lib/mod_cgi.so: undefined symbol: chunkqueue_w 
2016-01-26 18:42:17: (/data/GIT_fresh/poky/build/tmp/work/cortexa9-vfp-neon-poky-linux-gnueabi/lighttpd/1.4.36-r0/lighttpd-1.4.36/src/server.c.679) loading plugins finally failed 
lighttpd.

Note: why 1.4.36?!!

solution: exclude the 0001-mod_cgi-buffers-data-without-bound.patch from the file list that comes with the poky/meta/recipes-extended/lighttpd_1.4.39.bb