The MinnowBoard Chronicles Episode 25: Yocto builds for the MinnowBoard and the Portwell Neptune Alpha

In Episode 24, I finished off my new build machine, successfully did a QEMU image build on it, and loaded an off-the-shelf Ubuntu image into my new MinnowBoard Turbot. This week, I tackled a MinnowBoard Linux image build using Yocto, loaded it into my MinnowBoard, and also set about doing a Yocto image build for the Portwell Neptune Alpha board. But I ran into some problems.

At the end of Episode 24, I was floating on Cloud 9: my new PC did a Yocto image build for the QEMU emulator screamingly fast: about fifty times faster than my old PC. So, I looked forward to having a lot more fun exploring this technology, and faster too. On the other hand, another way to look at this is, I could make 50X more mistakes in the same amount of time.

To put it to the test, I tackled a MinnowBoard Turbot Yocto image build, using the instructions in the Yocto Project Quick Start Guide. Granted, these instructions are for the MinnowBoard MAX, opposed to the MinnowBoard Turbot that I have, but I figured they were close enough that it should just work. I fired up the bitbake core-image-base as per the instructions, and after about 45 minutes, the build completed!

Yocto MNW image built good

Needless to say, I was pretty excited at this point. If you’ve been following the MinnowBoard Chronicles series, you’ll know that I’ve been working on this for quite some time. It was about time I got a break!

Alas, after using the Linux “dd” command to create a bootable image on a USB stick, and booting it in the MinnowBoard, I got the following messages up-front, after which the Minnow just hung:

MNW Yocto image install failed

After trying it several times with different USB sticks, I kept getting the same installation failure. So, I decided to take a rest, and do something else for a while.

At the office, our engineering group is doing some development for our ScanWorks Embedded Diagnostics embedded JTAG product on a board we procured from Portwell. This Portwell board, part of the Neptune Alpha OpenBMC Development Kit, has an ASPEED AST2500 BMC that we have ported our embedded Intel x86 hardware-assisted debugging agent onto. Our engineers are kind enough to allow me to tinker with it after-hours. But, first, I wanted to use Yocto myself to build an image for this board.

Instructions on how to work with OpenBMC are on the Facebook OpenBMC GitHub. The directions are fairly straightforward, and fairly similar to building an image for the MinnowBoard. I’m pretty sure that the Neptune Alpha platform is meta-fbtp in the meta-openbmc/meta-facebook directory. So I fired up bitbake again:

alansguigna@debian:~/poky/build$ bitbake fbtp-image

NOTE: Your conf/bblayers.conf has been automatically updated.

WARNING: Host distribution "Debian-9.1" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.

Parsing recipes: 100% |#########################################| Time: 00:00:15

Parsing of 1912 .bb files complete (0 cached, 1912 parsed). 2460 targets, 379 skipped, 0 masked, 0 errors.

NOTE: Resolving any missing task queue dependencies

Build Configuration:

BB_VERSION        = "1.30.0"

BUILD_SYS         = "x86_64-linux"

NATIVELSBSTRING   = "Debian-9.1"

TARGET_SYS        = "arm-fb-linux-gnueabi"

MACHINE           = "fbtp"

DISTRO            = "poky"

DISTRO_VERSION    = "0.4"

TUNE_FEATURES     = "arm armv6"

TARGET_FPU        = "soft"

meta             

meta-yocto       

meta-yocto-bsp    = "krogoth:426bc4c3575a85391a60328edb1f7c6a6bdb95fd"

meta-oe          

meta-networking  

meta-python       = "krogoth:55c8a76da5dc099a7bc3838495c672140cedb78e"

meta-openbmc     

meta-aspeed      

meta-facebook    

meta-fbtp         = "helium:900b1f1e10b3d4a3b7ce9b8db01182f79f0831ea"

NOTE: Fetching uninative binary shim from http://downloads.yoctoproject.org/releases/uninative/1.0.1/x86_64-nativesdk-libc.tar.bz2;sha256sum=acf1e44a0ac2e855e81da6426197d36358bf7b4e88e552ef933128498c8910f8

NOTE: Preparing RunQueue

NOTE: Checking sstate mirror object availability (for 1101 objects)

NOTE: Executing SetScene Tasks

NOTE: Executing RunQueue Tasks

WARNING: byacc-native-20150711-r0 do_fetch: Failed to fetch URL ftp://invisible-island.net/byacc/byacc-20150711.tgz, attempting MIRRORS if available

WARNING: logrotate-3.9.1-r0 do_fetch: Checksum mismatch for local file /home/alansguigna/poky/build/downloads/logrotate-3.9.1.tar.gz

Cleaning and trying again.

WARNING: logrotate-3.9.1-r0 do_fetch: Renaming /home/alansguigna/poky/build/downloads/logrotate-3.9.1.tar.gz to /home/alansguigna/poky/build/downloads/logrotate-3.9.1.tar.gz_bad-checksum_e475e2e83d8c63dc7efe648cc50aabf6

WARNING: logrotate-3.9.1-r0 do_fetch: Checksum failure encountered with download of https://fedorahosted.org/releases/l/o/logrotate/logrotate-3.9.1.tar.gz – will attempt other sources if available

WARNING: lmsensors-3.4.0-r0 do_fetch: Failed to fetch URL http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-3.4.0.tar.bz2, attempting MIRRORS if available

WARNING: bios-util-0.2-r1 do_package_qa: QA Issue: /usr/bin/bios-util contained in package bios-util requires /usr/bin/python, but no providers found in RDEPENDS_bios-util? [file-rdeps]

WARNING: mTerm-0.1-r1 do_package_qa: QA Issue: /usr/local/fbpackages/mTerm/mTerm_server contained in package mTerm requires libc.so.6(GLIBC_2.4), but no providers found in RDEPENDS_mTerm? [file-rdeps]

ERROR: lzo-2.09-r0 do_configure: autoreconf execution failed.

ERROR: lzo-2.09-r0 do_configure: Function failed: do_configure (log file is located at /home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/temp/log.do_configure.30301)

ERROR: Logfile of failure stored in: /home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/temp/log.do_configure.30301

Log data follows:

| DEBUG: Executing python function sysroot_cleansstate

| DEBUG: Python function sysroot_cleansstate finished

| DEBUG: SITE files ['endian-little', 'bit-32', 'arm-common', 'arm-32', 'common-linux', 'common-glibc', 'arm-linux', 'arm-linux-gnueabi', 'common']

| DEBUG: Executing shell function autotools_preconfigure

| DEBUG: Shell function autotools_preconfigure finished

| DEBUG: Executing python function autotools_copy_aclocals

| DEBUG: SITE files ['endian-little', 'bit-32', 'arm-common', 'arm-32', 'common-linux', 'common-glibc', 'arm-linux', 'arm-linux-gnueabi', 'common']

| DEBUG: Python function autotools_copy_aclocals finished

| DEBUG: Executing shell function do_configure

| Unescaped left brace in regex is deprecated, passed through in regex; marked by <– HERE in m/\${ <– HERE ([^ \t=:+{}]+)}/ at /home/alansguigna/poky/build/tmp/sysroots/x86_64-linux/usr/bin/automake line 3939.

| Unescaped left brace in regex is deprecated, passed through in regex; marked by <– HERE in m/\${ <– HERE ([^ \t=:+{}]+)}/ at /home/alansguigna/poky/build/tmp/sysroots/x86_64-linux/usr/bin/automake line 3939.

| automake (GNU automake) 1.15

| Copyright (C) 2014 Free Software Foundation, Inc.

| License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>

| This is free software: you are free to change and redistribute it.

| There is NO WARRANTY, to the extent permitted by law.

|

| Written by Tom Tromey <tromey@redhat.com>

|        and Alexandre Duret-Lutz <adl@gnu.org>.

| AUTOV is 1

| NOTE: Executing ACLOCAL="aclocal –system-acdir=/home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/build/aclocal-copy/" autoreconf –verbose –install –force –exclude=autopoint -I /home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/lzo-2.09/autoconf/

| autoreconf: Entering directory `.'

| autoreconf: configure.ac: not using Gettext

| autoreconf: running: aclocal –system-acdir=/home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/build/aclocal-copy/ -I /home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/lzo-2.09/autoconf/ -I /home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/lzo-2.09/autoconf/ –force

| acinclude.m4:162: warning: the serial number must appear before any macro definition

| acinclude.m4:206: warning: the serial number must appear before any macro definition

| Segmentation fault

| aclocal: error: echo failed with exit status: 139

| autoreconf: aclocal failed with exit status: 139

| WARNING: exit code 1 from a shell command.

| ERROR: autoreconf execution failed.

| ERROR: Function failed: do_configure (log file is located at /home/alansguigna/poky/build/tmp/work/armv6-fb-linux-gnueabi/lzo/2.09-r0/temp/log.do_configure.30301)

ERROR: Task 2622 (/home/alansguigna/poky/meta/recipes-support/lzo/lzo_2.09.bb, do_configure) failed with exit code '1'

NOTE: Tasks Summary: Attempted 1906 tasks of which 15 didn't need to be rerun and 1 failed.

Waiting for 0 running tasks to finish:

Summary: 1 task failed:

  /home/alansguigna/poky/meta/recipes-support/lzo/lzo_2.09.bb, do_configure

Summary: There were 8 WARNING messages shown.

Summary: There were 2 ERROR messages shown, returning a non-zero exit code.

Okay, something basic is going wrong. I have to figure it out. I’ve googled some of this, without any success yet. One tip might be that I’m building on Debian 9 on my new machine, and I got the same warning from both the MinnowBoard Turbot and the Neptune Alpha builds:

WARNING: Host distribution "Debian-9.1" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.

Stay tuned!

Just as an aside, I’m keenly interested in the Neptune Alpha board, because it bills itself as the platform for OpenBMC development. OpenBMC is, of course, the toolchain for system management for most if not all hyperscale cloud computing environments. Embedded JTAG control, or ScanWorks Embedded Diagnostics, adds tremendous value to system management for said environments. I’ll write more on this topic later.