Embedded Linux using Yocto on 96boards Nitrogen

I’m trying to create an embedded LINUX distribution for the 96Board IoT Edition Nitrogen board using Yocto.

  1. I followed the board agnostic instructions in : https://www.96boards.org/documentY ation/consumer/guides/open_embedded.md.html

and setup the build environment using repo.

  1. I chose 96boards-32bit as the Yocto target MACHINE option for the nRF52832 microcontroller.

  2. And rpb as the distro.

When I tried the most basic build, these are the errors I see:

#bitbake rpb-console-image
WARNING: You have included the meta-virtualization layer, but ‘virtualization’ has not been enabled in your DISTRO_FEATURES. Some bbappend files may not take effect. See the meta-virtualization README for details on enabling virtualization support.
WARNING: /opt/yocto-96boards-nitrogen/build-rpb/conf/…/…/layers/meta-linaro/meta-linaro/recipes-kernel/linux/linux-hikey-ilp32_4.12.bb: Variable key FILES_${KERNEL_PACKAGE_NAME}-devicetree (/${KERNEL_IMAGEDEST}/.dtb /${KERNEL_IMAGEDEST}/.dtbo) replaces original key FILES_kernel-devicetree ( /boot/*.dtb).
WARNING: /opt/yocto-96boards-nitrogen/build-rpb/conf/…/…/layers/meta-linaro/meta-linaro/recipes-kernel/linux/linux-hikey-ilp32_4.12.bb: Variable key RDEPENDS_${KERNEL_PACKAGE_NAME}-image ( ${@oe.utils.conditional(‘KERNEL_IMAGETYPE’, ‘vmlinux’, ‘${KERNEL_PACKAGE_NAME}-vmlinux’, ‘’, d)}) replaces original key RDEPENDS_kernel-image ( kernel-devicetree).
Parsing recipes: 100% |##########################################| Time: 0:02:01
Parsing of 3220 .bb files complete (0 cached, 3220 parsed). 4440 targets, 412 skipped, 0 masked, 0 errors.
WARNING: No recipes available for:
/opt/yocto-96boards-nitrogen/build-rpb/conf/…/…/layers/meta-96boards/recipes-graphics/wayland/weston_6%.bbappend
NOTE: Resolving any missing task queue dependencies
NOTE: Multiple providers are available for zlib-native (zlib-native, zlib-intel-native)
Consider defining a PREFERRED_PROVIDER entry to match zlib-native
NOTE: Multiple providers are available for zlib (zlib, zlib-intel)
Consider defining a PREFERRED_PROVIDER entry to match zlib
NOTE: Multiple providers are available for nativesdk-zlib (nativesdk-zlib, nativesdk-zlib-intel)
Consider defining a PREFERRED_PROVIDER entry to match nativesdk-zlib
ERROR: Nothing RPROVIDES ‘grub-efi’ (but /opt/yocto-96boards-nitrogen/build-rpb/conf/…/…/layers/openembedded-core/meta/recipes-core/packagegroups/packagegroup-core-boot.bb RDEPENDS on or otherwise requires it)
grub-efi was skipped: incompatible with host arm-linaro-linux-gnueabi (not in COMPATIBLE_HOST)
NOTE: Runtime target ‘grub-efi’ is unbuildable, removing…
Missing or unbuildable dependency chain was: [‘grub-efi’]
NOTE: Runtime target ‘packagegroup-core-boot’ is unbuildable, removing…
Missing or unbuildable dependency chain was: [‘packagegroup-core-boot’, ‘grub-efi’]
ERROR: Required build target ‘rpb-console-image’ has no buildable providers.
Missing or unbuildable dependency chain was: [‘rpb-console-image’, ‘packagegroup-core-boot’, ‘grub-efi’]

There wasn’t anything on Google which could provide relevant information. What am I missing here??

Hi @96boardsri,

Nitrogen is an IoT board powered by a 32-bit microcontroller. It cannot run a linux distribution.
We only provide Zephyr RTOS support for this board: 96Boards Nitrogen — Zephyr Project Documentation

Hi @Mani.
Thanks for the quick response. I understand Linaro supports only Zephyr RTOS on this board.
But why can it ‘not run a Linux distribution’? Are you saying Linux would be an overkill?

My understanding is that Yocto can generate embedded Linux distributions for IoT boards as well. If that’s true, how can I proceed further?

This microcontroller is very resource constrained to run linux. It can only run baremetal code or RTOS.

@96boardsri I’m not saying that it is entirely impossible to run (someone ported linux for Intel 8051 microcontroller) but just didn’t exist and won’t be very useful.

You can not run Linux on the nitrogen board, mainly because RAM is limited to 64KB… I would suggest to have a look at this article series: Shrinking the kernel with link-time garbage collection [LWN.net]

Yocto/OpenEmbedded creates a custom Linux Based distro/system, It can be for IoT, desktop or server use cases… but on capable hardware like laptops, SoC, SoM (Dragonboard, Hikey, Orange Pi i96…) and generally not on MCU (Microcontroller) based boards.

Thank you @Loic for sharing the LWN article and Mani for trying to guide me in the same direction.