This external buildroot layer provides a basic support package for the SMARC-sAL28 board. It is an extenstion to buildroot which is provided outside of the standard buildroot tree.
The Kontron SMARC-sAL28 board is an upcoming product not yet available. This layer does not provide the full functionality of the board. Instead its intention is to be used to create a small footprint filesystem image as well as to be easy to use.
Esp. this layer lacks the following functionalities:
- 3D GPU support
- KEAPI
If you need the full functionality it is recommanded to use the Yocto Project layer provided together with the board.
The external is tested on Debian 10. The following system build dependencies are required (by buildroot itself).
apt install which sed make binutils build-essential gcc g++ \
bash patch gzip bzip2 perl tar cpio python unzip rsync file \
bc wget libncurses5-dev git subversion
This layer was tested on buildroot version 2020.08.
You have to clone buildroot and this layer. When building, use the
appropriate defconfig in the buildroot-external-smarc-sal28/configs
directory.
git clone git://git.busybox.net/buildroot -b 2021.02
git clone https://github.com/kontron/buildroot-external-smarc-sal28.git
mkdir build
cd build
make -C ../buildroot BR2_EXTERNAL=../buildroot-external-smarc-sal28 O=`pwd` kontron_smarc_sal28_defconfig
make
The resulting bootloader, kernel, root filesystem and SPI flash image will
be put in the build/images
directory.
After building, there will be three images. The images/spi-flash.img
is a
complete flash image which can be programmed into SPI flash. Please note,
that the first half of the SPI flash is usually write protected and can not
be programmed. Just write the second half of the image. This section will
contain the standard bootloader which is started by default. Alternatively,
you can program the whole image; in this case the programming of the first
half will silently fail u-boot, because it is write-protected by Kontron.
The images/sdcard-emmc.img
contains an image which can be transferred to the
eMMC on the board as well as to an SD card. It contains two partitions, one
which holds the kernel and device trees and one for the root filesystem.
Additionally, there is a reset configuration word (RCW) as well as a
bootloader. These are loaded during SDHC boot (see next paragraph) or
during eMMC boot. For normal SPI boot these two components are not needed.
The boot partition also contains a boot.cmd script which is started
automatically by the bootloader. The behaviour of the script can be
influenced by environment variables stored in the bootloader. See
here for details.
This image can also be used for SDHC boot. Use the SMARC test mode to enable it. This is a last resort booting mechanism which does not depend on any other flash content on the board and works in every case.
The images/spi-flash-updater.img
is an update image which can be
flashed to any block device which is supported as a boot device by the
board. For example, you can put it on an USB thumb drive. If the board is
configured to boot from USB, it will automatically load the updater. It
will update the user-writeable part of the SPI flash, ie. the bootloader.
Please note, that this is fail-safe as there is always a second,
write-protected bootloader. You can switch of the interactive behaviour of
the script by setting the environment variable non_interactive_update
to
a non-empty value. Be careful with that!
The images/spi-flash-updater.zip
contains the same files as the
corresponding image. Only difference is that you can extract the files
directly onto a pre-formatted storage device like an USB thumb drive. The
files have to be put into the root folder of the drive.
For further details about the processor's boot process see the documentation of the board in u-boot and the documentation of the rcw.
This external supports the concept of Generic Distribution Boot of the
u-boot bootloader. In a nutshell, the bootloader will search storage media
for a script with a specific name (by default boot.cmd
) and run it. The
user can define a search order. All in all, it mimicks the behaviour of a
PC bios.
The boot script provided with this external loads the device trees, device
tree overlays, sets the root filesystem device (root=
kernel parameter)
and finally loads and executes the kernel. Which device tree overlay is
loaded depends on u-boot environment variables.
First the device tree overlay for the board variant is loaded by looking at
the variant
environment variable. This variable is set automatically be
the bootloader. After that, if there is a carrier
variable set, it loads
the corresponding overlay. Finally, there is a generic overlays
variable,
where you can store any additional overlays names. They are loaded in the
order of appearance. All overlays have to be in the overlays/
directory
of the same storage device where the boot.cmd
is stored. See the table
below for more details.
Variable | Description |
---|---|
variant | Loads sl28-variant${variant}.dtbo |
carrier | If exists, loads carrier-${carrier}.dtbo |
overlays | Space separated list of additional overlays to load |
extrabootargs | Additional command line parameters appended to bootargs |
You can find the source at board/kontron/smarc-sal28/boot.cmd.
This project is licensed under the GPLv2 or later with exceptions. See
the COPYING
file for more information. Buildroot is licensed under the
GPLv2 or later with exceptions.