Difference between revisions of "Poky manual"

From ElphelWiki
Jump to: navigation, search
(Setup)
 
(39 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
==<font color="blue">Description</font>==
 +
Build the firmware for Elphel 10393 series camera systems from scratch.
 +
 +
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].
 +
 
==<font color="blue">Use cases</font>==
 
==<font color="blue">Use cases</font>==
* Linux kernel update when adding/developing a driver
+
* Update Linux Kernel when developing a driver
* When an application needs to be included into the firmware image archive
+
* Include application to the default firmware package
 
* Update Elphel's PHP extension
 
* Update Elphel's PHP extension
 
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.
 
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.
  
Other projects that use Python, PHP, Javascript, HTML, C/C++ on hardware (compiler is included in the firmware image) do not require this SDK use but it makes the process more convenient, e.g. by copying the built packages straight to the target hardware.
+
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.
  
 
==<font color="blue">Description</font>==
 
==<font color="blue">Description</font>==
  
 
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board
 
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board
* Yocto Poky revision = 2.6 (Thud)
+
* Yocto Poky revision = 2.7.1 (Warrior) - <font color="green">builds in Kubuntu 20.04.</font> <font color="red">Older OSes are not supported. Roll back to get built in 16.04.</font>
* <s>Yocto Poky revision = 2.4 (Rocko)</s>
+
* <s>Yocto Poky revision = 2.4 (Rocko) - <font color="green">builds in Kubuntu 16.04.</font> <font color="red">Won't build in 18.04 or 20.04.</font></s>
 
* <s>Yocto Poky revision = 2.0 (Jethro)</s>
 
* <s>Yocto Poky revision = 2.0 (Jethro)</s>
  
Line 29: Line 34:
  
 
==<font color="blue">Requirements</font>==
 
==<font color="blue">Requirements</font>==
* Kubuntu 18.04 x64 (as of Dec 2018)
+
* Kubuntu 20.04 x64
* For Poky 2.6 Thud see [http://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html Yocto Project Poky 2.6 mega-manual]
+
* <s>Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)</s>
 +
* <s>Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior</s>
  
 
==<font color="blue">Output files</font>==
 
==<font color="blue">Output files</font>==
Line 37: Line 43:
 
|-
 
|-
 
! File(s)
 
! File(s)
 +
! Build Command
 
! Description
 
! Description
 
|-
 
|-
 
| <font color='darkblue'>'''boot.bin'''</font>
 
| <font color='darkblue'>'''boot.bin'''</font>
 +
| ''bitbake u-boot''
 
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots '''u-boot-dtb.img'''
 
| 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>
 
| <font color='darkblue'>'''u-boot-dtb.img'''</font>
 +
| ''bitbake u-boot''
 
| full size u-boot with a stripped device tree (''cat u-boot.img some_stripped_devicetree.dtb > 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'')
 
|-
 
|-
 
|valign='top'| <font color='darkblue'>'''devicetree.dtb'''</font>
 
|valign='top'| <font color='darkblue'>'''devicetree.dtb'''</font>
 +
| bitbake device-tree
 
| device tree with listed interfaces, zynq registers, interrupts and drivers
 
| device tree with listed interfaces, zynq registers, interrupts and drivers
 
* ''elphel393/bootable-images/mmc/devicetree.dtb'' - mount rootfs from mmc partition
 
* ''elphel393/bootable-images/mmc/devicetree.dtb'' - mount rootfs from mmc partition
Line 51: Line 61:
 
|-
 
|-
 
| <font color='darkblue'>'''uImage'''</font>
 
| <font color='darkblue'>'''uImage'''</font>
 +
| ''bitbake linux-xlnx''
 
| kernel, drivers
 
| kernel, drivers
 
|-
 
|-
 
| <font color='darkblue'>'''rootfs.ubifs''', '''rootfs.ubi''', '''rootfs.tar.gz'''</font>
 
| <font color='darkblue'>'''rootfs.ubifs''', '''rootfs.ubi''', '''rootfs.tar.gz'''</font>
 +
| ''bitbake core-image-elphel393''
 
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc
 
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc
 
|}
 
|}
Line 77: Line 89:
  
 
==<font color="blue">Setup</font>==
 
==<font color="blue">Setup</font>==
* Poky 2.6 Thud (Kubuntu 18.04)
+
* Before building
 +
Installing some dependencies:
 +
sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy libssl-dev
 +
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):
 +
sudo apt install python2.7
 +
sudo ln -s python2.7 python2
 +
sudo ln -s python2.7 python
 +
 
 +
* Poky 2.7.1 Warrior (Kubuntu 20.04)
 
<font size='2'>
 
<font size='2'>
  git clone -b thud https://git.elphel.com/Elphel/elphel393.git
+
  git clone -b '''warrior''' https://git.elphel.com/Elphel/elphel393.git
 +
 
 +
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git
 +
 +
 
 
  cd elphel393
 
  cd elphel393
 
  ./setup.py
 
  ./setup.py
Line 86: Line 110:
 
  bitbake u-boot device-tree linux-xlnx core-image-elphel393
 
  bitbake u-boot device-tree linux-xlnx core-image-elphel393
 
</font>
 
</font>
* Poky 2.4 Rocko
+
 
 +
* <s>Poky 2.4 Rocko (Kubuntu 16.04)
 
<font size='2'>
 
<font size='2'>
  git clone -b rocko https://git.elphel.com/Elphel/elphel393.git
+
  git clone -b '''rocko''' https://git.elphel.com/Elphel/elphel393.git
 
  cd elphel393
 
  cd elphel393
 
  ./setup.py
 
  ./setup.py
Line 94: Line 119:
 
  . ./oe-init-build-env
 
  . ./oe-init-build-env
 
  bitbake u-boot device-tree linux-xlnx core-image-elphel393
 
  bitbake u-boot device-tree linux-xlnx core-image-elphel393
</font>
+
<!--''Temporary: linux-xlnx in Rocko depends on branch 'lwir' for x393. Change in projects.json line 42 from 'master' to 'lwir'.''-->
* Poky 2.0 Jethro
+
</font></s>
<font size='2'>
 
git clone -b jethro 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
 
</font>
 
  
'''Notes:'''
+
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:
* The last line builds all targets.
+
  sudo apt install python2.7 python-numpy
* If python-numpy was not installed
+
  sudo ln -s python2.7 python2
<font size='2'>
+
  sudo ln -s python2.7 python
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'''
 
</font>
 
* if rerun '''setup.py''' updates all repositories and reruns other procedures.
 
<font size='2'>
 
  $ ./setup.py
 
if you notice the kernel got updated then you might need to restart with '''bitbake linux-xlnx -c link -f'''
 
</font>
 
  
==<font color="blue">Compare '''built''' vs '''deployed''' software versions</font>==
+
After this bitbake just complained about missing tools (git, build-essential were already installed):
<font size='2'>
 
cd elphel393
 
./check_versions.py root@192.168.0.9
 
</font>
 
  
'''Notes:'''
+
sudo apt install chrpath diffstat gawk makeinfo
* '''deployed''' = running on the target system
 
  
{|
+
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal]]
+
* x393
|}
+
git host: git.elphel.com
 +
Clone and checkout: x393
  
==<font color="blue">Build</font>==
+
You may install numpy with
 +
sudo apt install python3-numpy
  
===<font color="blue">All targets</font>===
+
If you did not notice missing numpy, then during bitbake you will get error "build No rule to make target 'drivers/elphel/x393.o', needed by 'drivers/elphel/built-in.a'.  Stop." in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:
<font size='2'>
+
  bitbake linux-xlnx -c clean
  bitbake u-boot device-tree linux-xlnx core-image-elphel393
+
and re-running
</font>
+
  bitbake linux-xlnx device-tree core-image-elphel393
===<font color="blue">Bootloader</font>===
 
<font size='2'>
 
  bitbake u-boot
 
</font>
 
====Output====
 
* '''boot.bin'''
 
* '''u-boot-dtb.img'''
 
  
====Notes====
+
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located
* Since Poky 1.5.1: switched from u-boot-xlnx to u-boot - some of the u-boot-xlnx reached the upstream
+
sudo apt install zlib1g-dev
* 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
 
  
===<font color="blue">Device tree</font>===
+
==<font color="blue">Compare '''built''' vs '''deployed''' software versions</font>==
 
<font size='2'>
 
<font size='2'>
  bitbake device-tree
+
  cd elphel393
 +
./check_versions.py root@192.168.0.9
 
</font>
 
</font>
====Output====
 
* '''devicetree.dtb'''
 
  
===<font color="blue">Kernel</font>===
+
{|
<font size='2'>
+
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]
bitbake linux-xlnx
+
|}
</font>
 
====Output====
 
* '''uImage'''
 
 
 
====Notes====
 
* yocto jethro: Kernel version is 4.0, linux-xlnx
 
* yocto rocko: Kernel version is 4.9.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
 
 
 
===<font color="blue">Rootfs</font>===
 
<font size='2'>
 
bitbake core-image-elphel393
 
</font>
 
====Output====
 
* '''rootfs.tar.gz'''
 
* '''rootfs.ubi''','''rootfs.ubifs'''
 
  
 
==<font color="blue">Details for development</font>==
 
==<font color="blue">Details for development</font>==
 
[[Development_for_10393|'''Development for 10393''']]
 
[[Development_for_10393|'''Development for 10393''']]
<br/>
 
<br/>
 
 
==<font color="blue">Notes</font>==
 
* <span style='color:green'>'''[FIXED]'''</span> lighttpd-1.4.39, mod-cgi
 
compile warning:
 
<font size='2'>
 
implicit declaration of function 'chunkqueue_written'
 
</font>
 
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
 
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.
 
</font>
 
Note: why 1.4.36?!!
 
 
<b>solution</b>: 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?
 
<font size='2'>
 
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 ?!!!!!!!
 
</font>
 
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>
 
or
 
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
 
<font size='2'>
 
SRC_URI = "git://git.elphel.com/project.git;protocol=https;branch=master"
 
</font>
 
 
==<font color="blue">Errors</font>==
 
* '''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):
 
<font size='2'>
 
bitbake libxau-native
 
</font>
 
** 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
 
| *** 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
 
</font>
 

Latest revision as of 11:22, 1 June 2022

Description

Build the firmware for Elphel 10393 series camera systems from scratch.

Prebuilt releases can be found here.

Use cases

  • Update Linux Kernel when developing a driver
  • Include application to the default firmware package
  • Update Elphel's PHP extension
  • C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.

Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.

Description

  • Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board
  • Yocto Poky revision = 2.7.1 (Warrior) - builds in Kubuntu 20.04. Older OSes are not supported. Roll back to get built in 16.04.
  • Yocto Poky revision = 2.4 (Rocko) - builds in Kubuntu 16.04. Won't build in 18.04 or 20.04.
  • Yocto Poky revision = 2.0 (Jethro)

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

Requirements

  • Kubuntu 20.04 x64
  • Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)
  • Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior

Output files

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

File(s) Build Command Description
boot.bin bitbake u-boot u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots u-boot-dtb.img
u-boot-dtb.img bitbake u-boot full size u-boot with a stripped device tree (cat u-boot.img some_stripped_devicetree.dtb > u-boot-dtb.img)
devicetree.dtb bitbake device-tree 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 bitbake linux-xlnx kernel, drivers
rootfs.ubifs, rootfs.ubi, rootfs.tar.gz bitbake core-image-elphel393 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

  • Before building

Installing some dependencies:

sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy libssl-dev

Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):

sudo apt install python2.7
sudo ln -s python2.7 python2
sudo ln -s python2.7 python
  • Poky 2.7.1 Warrior (Kubuntu 20.04)

git clone -b warrior https://git.elphel.com/Elphel/elphel393.git

If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@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.4 Rocko (Kubuntu 16.04)

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

  • Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:
sudo apt install python2.7 python-numpy
sudo ln -s python2.7 python2
sudo ln -s python2.7 python

After this bitbake just complained about missing tools (git, build-essential were already installed):

sudo apt install chrpath diffstat gawk makeinfo

Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after

* x393
git host: git.elphel.com
Clone and checkout: x393

You may install numpy with

sudo apt install python3-numpy

If you did not notice missing numpy, then during bitbake you will get error "build No rule to make target 'drivers/elphel/x393.o', needed by 'drivers/elphel/built-in.a'. Stop." in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:

bitbake linux-xlnx -c clean

and re-running

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

When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located

sudo apt install zlib1g-dev

Compare built vs deployed software versions

cd elphel393
./check_versions.py root@192.168.0.9

check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)

Details for development

Development for 10393