Difference between revisions of "Poky manual"

From ElphelWiki
Jump to: navigation, search
m (Oleg moved page Poky 2.0 manual to Poky manual: also relates to Poky 2.4)
(Setup)
(12 intermediate revisions by the same user not shown)
Line 24: Line 24:
  
 
==<font color="blue">Required packages</font>==
 
==<font color="blue">Required packages</font>==
* Found in [http://www.yoctoproject.org/docs/2.0/mega-manual/mega-manual.html Yocto Project mega-manual] :
+
* For Poky 2.0 Jethro see [http://www.yoctoproject.org/docs/2.0/mega-manual/mega-manual.html Yocto Project Poky 2.0 mega-manual]
<font size='2'>
+
* For Poky 2.4 Rocko see [http://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html Yocto Project Poky 2.4 mega-manual]
Ubuntu and Debian
 
  sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
 
build-essential chrpath socat libsdl1.2-dev xterm device-tree-compiler
 
 
 
Fedora
 
sudo dnf install gawk make wget tar bzip2 gzip python unzip perl patch \
 
diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \
 
ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue socat \
 
findutils which SDL-devel xterm device-tree-compiler
 
 
 
OpenSUSE
 
sudo zypper install python gcc gcc-c++ git chrpath make wget python-xml \
 
diffstat makeinfo python-curses patch socat libSDL-devel xterm device-tree-compiler                     
 
 
 
CentOS
 
sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch \
 
diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath socat \
 
perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue SDL-devel xterm device-tree-compiler
 
</font>
 
  
 
==<font color="blue">Other dependencies</font>==
 
==<font color="blue">Other dependencies</font>==
Line 52: Line 33:
 
==<font color="blue">Output files</font>==
 
==<font color="blue">Output files</font>==
 
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:
 
The 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'''
+
{| class="wikitable"
* '''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.
+
! File(s)
** ''elphel393/bootable-images/mmc/devicetree.dtb'' - mount rootfs from mmc partition
+
! Description
** ''elphel393/bootable-images/nand/devicetree.dtb'' - mount rootfs from NAND flash
+
|-
* '''uImage''' - kernel, drivers
+
| <font color='darkblue'>'''boot.bin'''</font>
* '''rootfs.ubifs''', '''rootfs.ubi''', '''rootfs.tar.gz''' - rootfs in different formats
+
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots '''u-boot-dtb.img'''
 +
|-
 +
| <font color='darkblue'>'''u-boot-dtb.img'''</font>
 +
| full size u-boot with a stripped device tree (''cat u-boot.img some_stripped_devicetree.dtb > u-boot-dtb.img'')
 +
|-
 +
|valign='top'| <font color='darkblue'>'''devicetree.dtb'''</font>
 +
| device tree with listed interfaces, zynq registers, interrupts and drivers
 +
* ''elphel393/bootable-images/mmc/devicetree.dtb'' - mount rootfs from mmc partition
 +
* ''elphel393/bootable-images/nand/devicetree.dtb'' - mount rootfs from NAND flash
 +
|-
 +
| <font color='darkblue'>'''uImage'''</font>
 +
| kernel, drivers
 +
|-
 +
| <font color='darkblue'>'''rootfs.ubifs''', '''rootfs.ubi''', '''rootfs.tar.gz'''</font>
 +
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc
 +
|}
  
They are found at '''elphel393/bootable-images/''', which is a link (for convenience) to poky's deploy directory '''elphel393/poky/build/tmp/deploy/images/elphel393/'''
+
The file are located at '''elphel393/bootable-images/''', which is a link to poky's deploy directory '''elphel393/poky/build/tmp/deploy/images/elphel393/'''
  
 
* complete set of files for rootfs in NAND Flash: ''elphel393/bootable-images/nand/''
 
* complete set of files for rootfs in NAND Flash: ''elphel393/bootable-images/nand/''
Line 92: Line 88:
 
<font size='2'>
 
<font size='2'>
 
  git clone https://git.elphel.com/Elphel/elphel393.git # or git clone git@git.elphel.com:Elphel/elphel393.git # if ssh public key is uploaded
 
  git clone https://git.elphel.com/Elphel/elphel393.git # or git clone git@git.elphel.com:Elphel/elphel393.git # if ssh public key is uploaded
  # then follow the same steps as for Jethro
+
  # then follow the same steps as for Rocko
 
</font>
 
</font>
  
Line 126: Line 122:
  
 
===<font color="blue">All targets</font>===
 
===<font color="blue">All targets</font>===
 +
<font size='2'>
 
  bitbake u-boot device-tree linux-xlnx core-image-elphel393
 
  bitbake u-boot device-tree linux-xlnx core-image-elphel393
 
+
</font>
 
===<font color="blue">Bootloader</font>===
 
===<font color="blue">Bootloader</font>===
 
<font size='2'>
 
<font size='2'>
Line 174: Line 171:
  
 
==<font color="blue">Notes</font>==
 
==<font color="blue">Notes</font>==
* <span style='color:green'>[FIXED]</span> lighttpd-1.4.39, mod-cgi
+
* <span style='color:green'>'''[FIXED]'''</span> lighttpd-1.4.39, mod-cgi
 
compile warning:  
 
compile warning:  
 +
<font size='2'>
 
  implicit declaration of function 'chunkqueue_written'
 
  implicit declaration of function 'chunkqueue_written'
 +
</font>
 
results in lighttpd failing to start if mod-cgi is enabled:
 
results in lighttpd failing to start if mod-cgi is enabled:
 +
<font size='2'>
 
  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  
 
  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  
 
  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.
 
  lighttpd.
 +
</font>
 
Note: why 1.4.36?!!
 
Note: why 1.4.36?!!
  
Line 187: Line 188:
 
* '''Invalidate chache/checksum on package code changes'''
 
* '''Invalidate chache/checksum on package code changes'''
 
** SRCREV = "${AUTOREV}" - updates the checksum but the cache is not cleared/invalidated?
 
** SRCREV = "${AUTOREV}" - updates the checksum but the cache is not cleared/invalidated?
 +
<font size='2'>
 
  SRCREV <- AUTOREV <- AUTOREV <- "${@bb.fetch2.get_autorev(d)}" (bitbake/lib/bb/__init__.py)
 
  SRCREV <- AUTOREV <- AUTOREV <- "${@bb.fetch2.get_autorev(d)}" (bitbake/lib/bb/__init__.py)
 
   
 
   
Line 196: Line 198:
 
   
 
   
 
  BB_DONT_CACHE ?!!!!!!!
 
  BB_DONT_CACHE ?!!!!!!!
 
+
</font>
 
Force to always execute recipe starting from a certain task:
 
Force to always execute recipe starting from a certain task:
 +
<font size='2'>
 
  recipe-outside-of-task: <font size='2' color='green'><b>do_compile[nostamp]="1"</b></font>
 
  recipe-outside-of-task: <font size='2' color='green'><b>do_compile[nostamp]="1"</b></font>
 
  or
 
  or
 
  recipe-class-inside-task: <font size='2' color='green'><b>d.setVarFlag('do_compile', 'nostamp', '1')</b></font>
 
  recipe-class-inside-task: <font size='2' color='green'><b>d.setVarFlag('do_compile', 'nostamp', '1')</b></font>
 
+
</font>
 
* clone git repo over https in a recipe
 
* clone git repo over https in a recipe
 +
<font size='2'>
 
  SRC_URI = "git://git.elphel.com/project.git;protocol=https;branch=master"
 
  SRC_URI = "git://git.elphel.com/project.git;protocol=https;branch=master"
 +
</font>
  
 
==<font color="blue">Errors</font>==
 
==<font color="blue">Errors</font>==
Line 210: Line 215:
 
** Possible reason - Kubuntu 14.04 - the system libraries are too old? The up-to-date Kubuntu release is 16.04.
 
** Possible reason - Kubuntu 14.04 - the system libraries are too old? The up-to-date Kubuntu release is 16.04.
 
** Command (example):
 
** Command (example):
 +
<font size='2'>
 
  bitbake libxau-native
 
  bitbake libxau-native
 +
</font>
 
** log:
 
** log:
 +
<font size='2'>
 
  | x86_64-linux-libtool: link: ar cru .libs/libXau.a  AuDispose.o AuFileName.o AuGetAddr.o AuGetBest.o AuLock.o AuRead.o AuUnlock.o AuWrite.o
 
  | x86_64-linux-libtool: link: ar cru .libs/libXau.a  AuDispose.o AuFileName.o AuGetAddr.o AuGetBest.o AuLock.o AuRead.o AuUnlock.o AuWrite.o
 
  | *** buffer overflow detected ***: ar terminated
 
  | *** buffer overflow detected ***: ar terminated
Line 261: Line 269:
 
  | make: *** [all] Error 2
 
  | make: *** [all] Error 2
 
  | ERROR: oe_runmake failed
 
  | ERROR: oe_runmake failed
 +
</font>

Revision as of 09:55, 22 January 2018

Description

  • Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board
  • Yocto Poky revision = 2.0 (Jethro), recently updated to 2.4 (Rocko)

Features

  • Once everything is built it supports updating software projects (files and binaries) on the target system
    • access is set up in yocto's local.conf (see setup.py output) + ssh-copy-id
    • bitbake some-app -c target_scp from the command line or Eclipse IDE - see examples in elphel-apps-... at Git

Supported OSes

  • Kubuntu 14.04.3 LTS x64 (until June 2016)
  • Kubuntu 16.04 x64 (as of June 2016)

Required packages

Other dependencies

sudo apt-get install python-numpy

Output files

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

File(s) Description
boot.bin u-boot as the first stage bootloader = Secondary Program Loader (SPL) 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
  • elphel393/bootable-images/mmc/devicetree.dtb - mount rootfs from mmc partition
  • elphel393/bootable-images/nand/devicetree.dtb - mount rootfs from NAND flash
uImage kernel, drivers
rootfs.ubifs, rootfs.ubi, rootfs.tar.gz rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc

The file are located at elphel393/bootable-images/, which is a link to poky's deploy directory elphel393/poky/build/tmp/deploy/images/elphel393/

  • complete set of files for rootfs in NAND Flash: elphel393/bootable-images/nand/
  • complete set of files for rootfs on MMC (micro SD card): elphel393/bootable-images/mmc/

Write files to media and boot

Boot from micro SD card

  • Use recovery or regular μSD card
  • EXT4 partition mounted as /

Detailed instructions

Boot from NAND flash

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

Detailed instructions

Notes

Setup

  • Poky 2.4 Rocko

git clone -b rocko https://git.elphel.com/Elphel/elphel393.git
cd elphel393
./setup.py
cd poky
. ./oe-init-build-env
bitbake u-boot device-tree linux-xlnx core-image-elphel393

  • Poky 2.2 Jethro

git clone https://git.elphel.com/Elphel/elphel393.git # or git clone git@git.elphel.com:Elphel/elphel393.git # if ssh public key is uploaded
# then follow the same steps as for Rocko

Notes:

  • The last line builds all targets.
  • If python-numpy was not installed

x393.h will not be generated > bitbake linux-xnlx will fail.
To recover:
1. sudo apt install python-numpy
2. run bitbake linux-xlnx -c link -f

  • if rerun setup.py updates all repositories and reruns other procedures.

$ ./setup.py
if you notice the kernel got updated then you might need to restart with bitbake linux-xlnx -c link -f

Compare built vs deployed software versions

cd elphel393
./check_versions.py root@192.168.0.9

Notes:

  • deployed = running on the target system
check_versions.py output in terminal

Build

All targets

bitbake u-boot device-tree linux-xlnx core-image-elphel393

Bootloader

bitbake u-boot

Output

  • boot.bin
  • 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

Device tree

bitbake device-tree

Output

  • devicetree.dtb

Kernel

bitbake linux-xlnx

Output

  • uImage

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

Rootfs

bitbake core-image-elphel393

Output

  • rootfs.tar.gz
  • rootfs.ubi,rootfs.ubifs

Details for development

Development for 10393

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

  • Invalidate chache/checksum on package code changes
    • SRCREV = "${AUTOREV}" - updates the checksum but the cache is not cleared/invalidated?

SRCREV <- AUTOREV <- AUTOREV <- "${@bb.fetch2.get_autorev(d)}" (bitbake/lib/bb/__init__.py)

def get_autorev(d):
   #  only not cache src rev in autorev case
   if d.getVar('BB_SRCREV_POLICY', True) != "cache":
       d.setVar('__BB_DONT_CACHE', '1')
   return "AUTOINC"

BB_DONT_CACHE ?!!!!!!!

Force to always execute recipe starting from a certain task:

recipe-outside-of-task: do_compile[nostamp]="1"
or
recipe-class-inside-task: d.setVarFlag('do_compile', 'nostamp', '1')

  • clone git repo over https in a recipe

SRC_URI = "git://git.elphel.com/project.git;protocol=https;branch=master"

Errors

  • Aborted, core dumped
    • Got when tried to build gstreamer1.0-plugins-base - error in one of the packages it depends on.
    • Possible reason - Kubuntu 14.04 - the system libraries are too old? The up-to-date Kubuntu release is 16.04.
    • Command (example):

bitbake libxau-native

    • log:

| x86_64-linux-libtool: link: ar cru .libs/libXau.a  AuDispose.o AuFileName.o AuGetAddr.o AuGetBest.o AuLock.o AuRead.o AuUnlock.o AuWrite.o
| *** buffer overflow detected ***: ar terminated
| ======= Backtrace: =========
| /lib/x86_64-linux-gnu/libc.so.6(+0x7329f)[0x2b732eade29f]
| /lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x5c)[0x2b732eb75bbc]
| /lib/x86_64-linux-gnu/libc.so.6(+0x109a90)[0x2b732eb74a90]
| /lib/x86_64-linux-gnu/libc.so.6(+0x108f99)[0x2b732eb73f99]
| /lib/x86_64-linux-gnu/libc.so.6(_IO_default_xsputn+0xbc)[0x2b732eae660c]
| /lib/x86_64-linux-gnu/libc.so.6(_IO_padn+0xa0)[0x2b732eada600]
| /lib/x86_64-linux-gnu/libc.so.6(_IO_vfprintf+0x3c4d)[0x2b732eab888d]
| /lib/x86_64-linux-gnu/libc.so.6(__vsprintf_chk+0x84)[0x2b732eb74024]
| /lib/x86_64-linux-gnu/libc.so.6(__sprintf_chk+0x7d)[0x2b732eb73f7d]
| ar[0x406d20]
| ar[0x4088df]
| ar[0x40bf08]
| ar[0x404a86]
| ar[0x405003]
| ar[0x402a45]
| /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x2b732ea8cf45]
| ar[0x402dc5]
| ======= Memory map: ========
| 00400000-00482000 r-xp 00000000 08:01 27273645                           /usr/local/bin/ar
| 00682000-00683000 r--p 00082000 08:01 27273645                           /usr/local/bin/ar
| 00683000-00684000 rw-p 00083000 08:01 27273645                           /usr/local/bin/ar
| 00776000-007e0000 rw-p 00000000 00:00 0                                  [heap]
| 2b732e846000-2b732e869000 r-xp 00000000 08:01 26740221                   /lib/x86_64-linux-gnu/ld-2.19.so
| 2b732e869000-2b732e86d000 rw-p 00000000 00:00 0
| 2b732e898000-2b732e89b000 rw-p 00000000 00:00 0
| 2b732ea68000-2b732ea69000 r--p 00022000 08:01 26740221                   /lib/x86_64-linux-gnu/ld-2.19.so
| 2b732ea69000-2b732ea6a000 rw-p 00023000 08:01 26740221                   /lib/x86_64-linux-gnu/ld-2.19.so
| 2b732ea6a000-2b732ea6b000 rw-p 00000000 00:00 0
| 2b732ea6b000-2b732ec25000 r-xp 00000000 08:01 26740235                   /lib/x86_64-linux-gnu/libc-2.19.so
| 2b732ec25000-2b732ee25000 ---p 001ba000 08:01 26740235                   /lib/x86_64-linux-gnu/libc-2.19.so
| 2b732ee25000-2b732ee29000 r--p 001ba000 08:01 26740235                   /lib/x86_64-linux-gnu/libc-2.19.so
| 2b732ee29000-2b732ee2b000 rw-p 001be000 08:01 26740235                   /lib/x86_64-linux-gnu/libc-2.19.so
| 2b732ee2b000-2b732ee30000 rw-p 00000000 00:00 0
| 2b732ee30000-2b732ee46000 r-xp 00000000 08:01 26741717                   /lib/x86_64-linux-gnu/libgcc_s.so.1
| 2b732ee46000-2b732f045000 ---p 00016000 08:01 26741717                   /lib/x86_64-linux-gnu/libgcc_s.so.1
| 2b732f045000-2b732f046000 rw-p 00015000 08:01 26741717                   /lib/x86_64-linux-gnu/libgcc_s.so.1
| 7fffb978b000-7fffb97ad000 rw-p 00000000 00:00 0                          [stack]
| 7fffb97f8000-7fffb97fa000 r-xp 00000000 00:00 0                          [vdso]
| ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
| ./x86_64-linux-libtool: line 1723:  8035 Aborted                 (core dumped) ar cru .libs/libXau.a AuDispose.o AuFileName.o AuGetAddr.o AuGetBest.o AuLock.o AuRead.o AuUnlock.o AuWrite.o
| make[2]: *** [libXau.la] Error 134
| make[2]: Leaving directory `/GIT/elphel393/poky/build/tmp/work/x86_64-linux/libxau-native/1_1.0.8-r0/build'
| make[1]: *** [all-recursive] Error 1
| make[1]: Leaving directory `/GIT/elphel393/poky/build/tmp/work/x86_64-linux/libxau-native/1_1.0.8-r0/build'
| make: *** [all] Error 2
| ERROR: oe_runmake failed