Difference between revisions of "Poky manual"
(→Setup) |
(→Build) |
||
Line 115: | Line 115: | ||
====Notes==== | ====Notes==== | ||
− | * | + | * Current the recipe installs only binaries. Will upgrade u-boot from '''2016.05''' to the current release later. |
− | |||
− | |||
===<font color="blue">Device tree</font>=== | ===<font color="blue">Device tree</font>=== |
Revision as of 15:24, 28 December 2018
Contents
Use cases
- Linux kernel update when adding/developing a driver
- When an application needs to be included into the firmware image archive
- 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 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.
Description
- Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board
- Yocto Poky revision = 2.6 (Thud)
-
Yocto Poky revision = 2.4 (Rocko) -
Yocto Poky revision = 2.0 (Jethro)
Features
- Environment is set up with a single script
- All Elphel projects are configured for Eclipse IDE:
- fpga projects (verilog)
- kernel
- applications projects
- All steps for fpga projects are run from Eclipse IDE
- 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 18.04 x64 (as of Dec 2018)
- For Poky 2.6 Thud see Yocto Project Poky 2.6 mega-manual
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
|
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 /
Boot from NAND flash
- The default boot option - power on.
- A UBIFS image is written to /dev/mtd4 - is mounted as /
Notes
- Read more about boot options.
Setup
- Poky 2.6 Thud (Kubuntu 18.04)
git clone -b thud 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
Compare built vs deployed software versions
cd elphel393 ./check_versions.py root@192.168.0.9
Notes:
- deployed = running on the target system
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
- Current the recipe installs only binaries. Will upgrade u-boot from 2016.05 to the current release later.
Device tree
bitbake device-tree
Output
- devicetree.dtb
Kernel
bitbake linux-xlnx
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
Rootfs
bitbake core-image-elphel393
Output
- rootfs.tar.gz
- rootfs.ubi,rootfs.ubifs
Details for development
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