OpenEmbedded / Yocto Project / Poky: build from sources


How to build Poky for AT91

Note that building an entire distribution is a long process. It also requires a big amount of free disk space.

The support for Microchip AT91 SoC family is included in a particular Yocto Project layer: meta-atmel. The source for this layer are hosted on Linux4SAM GitHub account: https://github.com/linux4sam/meta-atmel

Building environment

A step-by-step comprehensive installation is explained in the Yocto Project Quick Build. The following lines have to be considered as an add-on that is AT91 specific or that can facilitate your setup.

Prerequisite

Here are the reference pages for setting up a Yocto Project building environment: What You Need and How You Get It.

Note add git-lfs to the package requirement list from whichever Linux distribution you use.

For instance, on Ubuntu or debian, these packages need to be installed on your development host:

sudo apt-get install gawk wget git-core git-lfs diffstat unzip texinfo gcc-multilib \
     build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
     xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
     pylint3 xterm

Step by step build procedure

Note here is a copy of the README procedure available directly in the meta-atmel layer. This file in the meta-atmel layer repository must be considered as the reference and the following copy can be out-of-sync.

Note starting with Linux4SAM 2021.04 release, the meta-atmel layer supports Yocto Project templates, so make sure you create a new build environment using oe-init-build-env

This layer provides support for Microchip microprocessors (aka AT91)
====================================================================

For more information about the Microchip MPU product line see:
http://www.microchip.com/design-centers/32-bit-mpus
Linux & Open Source on Microchip microprocessors:
http://www.linux4sam.org


Supported SoCs / MACHINE names
==============================
Note that most of the machine names below, have a SD Card variant that can be
built by adding an 





---++ Poky SDK

The meta-toolchain recipes build tarballs which contain cross compilation toolchain, cross compiled libraries, includes and configuration tools suitable for application development outside Poky.
The cross-compilation toolchain and all coss-compiled libraries will be present in this SDK allowing the user to exactly match what is provided in the associated !Linux4SAM demo image. If a random cross-compilation toolchain was used, it would lead to undefined symbols and unmatched library calls. With this SDK matching what is present on the target, cross-development is enhanced with all possibilities offered by shared libraries that any embedded Linux developer could expect from such a system.
This cross-development cycle doesn't have to be integrated within an !OpenEmbedded integration flow: usual Makefiles, cmake, IDE... in short: any developer-friendly environment could be used allowing the separation of the development phase from the integration phase. ---+++ Build *Poky SDK* This SDK is generated using the bitbake handy target =populate_sdk=.
bitbake -c populate_sdk microchip-graphics-image
or
bitbake -c populate_sdk microchip-headless-image
It will produce a comprehensive SDK script (auto-extracting archive) available in the deployment directory: from the build directory it is usually located in =tmp/deploy/sdk=.
For instance, for the sama5d27-wlsom1-ek-sd graphic image type of SDK, you can find it available in: =tmp/deploy/sdk/poky-atmel-glibc-x86_64-microchip-graphics-image-cortexa5t2hf-neon-vfpv4-sama5d27-wlsom1-ek-sd-toolchain-4.0.17.sh= ---+++ Install *Poky SDK* Once the SDK archive is generated, you can install it by running the script directly. Choose the appropriate script name according to your board. HELP Note that some of the SDK variants can apply on several boards or !SoC (sama5d2 or sama5d4 SDK could match all boards equipped with these !SoCs). You can check the [[SoftwareTools#Yocto_Project_SDK][Yocto Project SDK table]] for more information about the different SDK "flavors". Some installation information will be asked to the user as well as the appropriate installation rights: Hereunder is an example with a SDK from the =Kirkstone= branch of !OpenEmbedded present in =Linux4SAM 2024.04=:
$ ./poky-atmel-glibc-x86_64-microchip-graphics-image-cortexa5t2hf-neon-vfpv4-sama5d27-wlsom1-ek-sd-toolchain-4.0.17.sh
Poky (Yocto Project Reference Distro) SDK installer version 4.0.17
=================================================================
Enter target directory for SDK (default: /opt/poky-atmel/4.0.17): 
You are about to install the SDK to "/opt/poky-atmel/4.0.17". Proceed [Y/n]?  
[sudo] password for dharma: 
Extracting SDK........................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /opt/poky-atmel/4.0.17/environment-setup-cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi
---+++ Use *Poky SDK* The installation directory (/opt/poky-atmel/4.0.17) contains a setup script which can be sourced to initialize all required environment variables.
cd /opt/poky-atmel/4.0.17/
source environment-setup-cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi
You can check your new environment
export | less
[...]
declare -x AR="arm-poky-linux-gnueabi-ar"
declare -x ARCH="arm"
declare -x AS="arm-poky-linux-gnueabi-as "
declare -x CC="arm-poky-linux-gnueabi-gcc  -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a5 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/poky-atmel/4.0.17/sysroots/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi"
declare -x CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types "
declare -x CONFIGURE_FLAGS="--target=arm-poky-linux-gnueabi --host=arm-poky-linux-gnueabi --build=x86_64-linux --with-libtool-sysroot=/opt/poky-atmel/4.0.17/sysroots/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi"
declare -x CONFIG_SITE="/opt/poky-atmel/4.0.17/site-config-cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi"
declare -x CPP="arm-poky-linux-gnueabi-gcc -E  -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a5 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/poky-atmel/4.0.17/sysroots/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi"
declare -x CROSS_COMPILE="arm-poky-linux-gnueabi-"
declare -x CXX="arm-poky-linux-gnueabi-g++  -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a5 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/poky-atmel/4.0.17/sysroots/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi"
declare -x CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types "
declare -x LD="arm-poky-linux-gnueabi-ld  --sysroot=/opt/poky-atmel/4.0.17/sysroots/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi"
declare -x LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed  -Wl,-z,relro,-z,now"
[...]
declare -x OECORE_DISTRO_VERSION="4.0.17"
[...]
NoteTo be able to compile the EGT demo applications provided in the !Linux4SAM release, SDK needs to be generated using a clone of [[https://github.com/linux4sam/meta-atmel/commits/kirkstone][meta-atmel]]. Note EGT demo applications can be compiled using the poky SDK by following the below steps
$ source /opt/poky-atmel/4.0.17/environment-setup-armv5e-poky-linux-gnueabi
$ git clone --recursive https://github.com/linux4sam/egt.git
$ cd egt/
$ ./autogen.sh
$ ./configure --host="arm"
$ make

NoteTo use the SDK toolchain directly one can refer to the [[https://docs.yoctoproject.org/sdk-manual/working-projects.html#using-the-sdk-toolchain-directly][Yocto Project documentation]]. ---++ Tips & tricks ---+++ !BitBake * [[https://www.yoctoproject.org/docs/latest/bitbake-user-manual/bitbake-user-manual.html][BitBake User Manual]] * [[http://elinux.org/Bitbake_Cheat_Sheet][BitBake Cheat Sheet]] * List tasks provided by a package:
bitbake -c listtasks <package_name>
You can use one of those tasks to have a fine grained control over the package building. ---+++ Hello World example [[https://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html#new-recipe-testing-examples][Reference to the "Hello World" example]]. ---++ Recent FAQ $ YoctoProject:
Using Systemd: Basic systemd user guide. ([[Sama7d65CuriosityMainPage][Sama7d65Curiosity]], [[Sama5d29CuriosityMainPage][Sama5d29Curiosity]], [[Sam9x75CuriosityMainPage][Sam9x75Curiosity]], [[Sam9x60CuriosityMainPage][Sam9x60Curiosity]], [[Sama7g5EKMainPage][Sama7g5-ek]], [[Sama5d2IcpMainPage][Sama5d2-icp]], [[Sam9x60EKMainPage][Sam9x60EK]], [[Sama5d27WLSom1EKMainPage][Sama5d27WLSom1EK]], [[Sama5d27Som1EKMainPage][Sama5d27Som1EK]])
Sam 9 x 60 Ek Attaching Tm 5000 Display: Addition to the other generic FAQ about LCD displays: ConnectModuleFromPDA. ([[Sam9x60EKMainPage][Sam9x60EK]])
Audio FAQ: Audio with ALSA. ()
Gui Solutions: Presentation of some GUI solutions. ([[Sama5d27Som1EKMainPage][Sama5d27Som1EK]], [[Sama5d2PtcEKMainPage][Sama5d2PtcEK]], [[Sama5d2XplainedMainPage][Sama5d2Xplained]], [[Sama5d4XplainedMainPage][Sama5d4Xplained]], [[Sama5d4ekMainPage][Sama5d4ek]], [[Sama5d3XplainedMainPage][Sama5d3Xplained]], [[Sama5d3xekMainPage][Sama5d3xek]])
Yocto Project FAQ: Some Yocto Project FAQ entries. ([[Sama5d27Som1EKMainPage][Sama5d27Som1EK]], [[Sama5d2PtcEKMainPage][Sama5d2PtcEK]], [[Sama5d2XplainedMainPage][Sama5d2Xplained]], [[Sama5d4XplainedMainPage][Sama5d4Xplained]], [[Sama5d4ekMainPage][Sama5d4ek]], [[Sama5d3XplainedMainPage][Sama5d3Xplained]], [[Sama5d3xekMainPage][Sama5d3xek]], [[AT91sam9x5ekMainPage][AT91sam9x5-ek]])