OpenEmbedded / Yocto Project / Poky: build from sources
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.
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
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.
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.
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"
[...]
To 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]].
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
To 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]])