167 lines
4.8 KiB
ReStructuredText
167 lines
4.8 KiB
ReStructuredText
LVGL application
|
|
################
|
|
|
|
This section provides information about the steps to follow to get a custom
|
|
application using LVGL running on the board.
|
|
|
|
Update RootFS
|
|
*************
|
|
|
|
Depending on the application, it might be necessary to update the rootfs. Let's
|
|
take as example the compilation of LVGL with DRM. The system must have
|
|
``libdrm`` installed.
|
|
|
|
.. code-block:: bash
|
|
|
|
cd output
|
|
make menuconfig
|
|
|
|
To search for a string pattern in the configuration, press ``/`` followed by
|
|
the desired pattern. For example, search for ``libdrm``. You should find
|
|
``BR2_PACKAGE_LIBDRM`` set to **[=n]**. The Location field indicates where to
|
|
find this option. By pressing the corresponding number key (9-0), you can
|
|
navigate directly to the option.
|
|
|
|
In the ``Search Results`` window, the ``Depends on`` section lists the required
|
|
packages or options that need to be enabled (or disabled) to make the target
|
|
package configurable. For any package you wish to add, these dependencies must
|
|
be met; otherwise, the option will remain hidden.
|
|
|
|
When the package configuration is completed, build the environment to add the
|
|
packages (``make`` in **output** folder).
|
|
|
|
To verify the library was installed, we can find it in the target sysroot:
|
|
|
|
.. code-block:: bash
|
|
|
|
find build/ -name "*libdrm*"
|
|
|
|
You should see the include folder and the .so files.
|
|
|
|
.. _generate_sdk:
|
|
|
|
Generate SDK and set up environment
|
|
***********************************
|
|
|
|
Generate an SDK that you can use to cross-compile the application for the
|
|
target (RPi4).
|
|
|
|
.. code-block:: bash
|
|
|
|
make sdk
|
|
|
|
A ``.tar.gz`` is generated in output/images. This is the SDK!
|
|
|
|
To use it, extract it anywhere.
|
|
|
|
.. code-block:: bash
|
|
|
|
mkdir -p ~/sdk
|
|
tar -xzf images/aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz -C ~/sdk
|
|
cd ..
|
|
|
|
To set up the environment
|
|
|
|
.. code-block:: bash
|
|
|
|
mkdir application && cd application
|
|
touch setup-build-env.sh && chmod +x setup-build-env.sh
|
|
|
|
The script ``setup-build-env.sh`` looks like this:
|
|
|
|
.. code-block:: bash
|
|
|
|
#!/bin/bash
|
|
|
|
SDK_PATH="$HOME/sdk/aarch64-buildroot-linux-gnu_sdk-buildroot"
|
|
|
|
export PATH="${SDK_PATH}/bin:${PATH}"
|
|
|
|
export SYSROOT="${SDK_PATH}/aarch64-buildroot-linux-gnu/sysroot"
|
|
|
|
export CROSS_COMPILE="aarch64-buildroot-linux-gnu-"
|
|
|
|
export CC="${CROSS_COMPILE}gcc"
|
|
export CXX="${CROSS_COMPILE}g++"
|
|
export LD="${CROSS_COMPILE}ld"
|
|
export AR="${CROSS_COMPILE}ar"
|
|
export AS="${CROSS_COMPILE}as"
|
|
|
|
export CFLAGS="--sysroot=${SYSROOT}"
|
|
export LDFLAGS="--sysroot=${SYSROOT}"
|
|
|
|
|
|
Build the application
|
|
*********************
|
|
|
|
The environment is now set up, and we're ready to build an application using
|
|
the ``lv_benchmark`` repository that is inspired from `lv_port_linux
|
|
<https://github.com/lvgl/lv_port_linux>`_.
|
|
|
|
Navigate back to the root of the project and clone the repository:
|
|
|
|
.. code-block:: bash
|
|
|
|
git clone --recurse-submodules https://github.com/EDGEMTech/lv_benchmark.git
|
|
|
|
The application is configured to run on fbdev. You can either maintain the
|
|
default configuration or modify it according to your preferences.
|
|
|
|
Compile the application
|
|
|
|
.. code-block:: bash
|
|
|
|
cd lv_benchmark
|
|
cmake -B build -S . -DCMAKE_C_COMPILER=${CROSS_COMPILE}gcc -DCMAKE_CXX_COMPILER=${CROSS_COMPILE}g++ -DCMAKE_SYSROOT=${SYSROOT} -DCMAKE_C_FLAGS="--sysroot=${SYSROOT}" -DCMAKE_CXX_FLAGS="--sysroot=${SYSROOT}"
|
|
make -j $(nproc) -C build
|
|
|
|
Verify that the output executable was compiled with the correct toolchain:
|
|
|
|
.. code-block:: bash
|
|
|
|
file bin/lvgl-app
|
|
cd ../..
|
|
|
|
The output should contain these information:
|
|
|
|
- ARM aarch64
|
|
- interpreter /lib/ld-linux-aarch64.so.1
|
|
|
|
Set a rootfs overlay
|
|
********************
|
|
|
|
In Buildroot, a rootfs overlay (or root filesystem overlay) is a mechanism that
|
|
allows you to add custom files, directories, and configurations directly into
|
|
the root filesystem of the target image during the build process. It is a way
|
|
to extend or modify the content of the root filesystem without altering the
|
|
base packages or recompiling everything.
|
|
|
|
Create the rootfs overlay structure and include the executable of the built
|
|
$application.
|
|
|
|
.. code-block:: bash
|
|
|
|
mkdir -p resources/board/rootfs_overlay/usr/bin
|
|
cp application/lv_benchmark/bin/lvgl-app resources/board/rootfs_overlay/usr/bin/
|
|
|
|
Update the configuration.
|
|
|
|
.. code-block:: bash
|
|
|
|
cd output
|
|
make menuconfig
|
|
|
|
Find the rootfs overlay option ``System configuration > Root filesystem overlay
|
|
directories`` and use the relative path to the rootfs overlay with your
|
|
application (**../resources/board/rootfs_overlay**) and save the
|
|
configuration.
|
|
|
|
Now use ``make`` command to apply the rootfs overlay and confirm the
|
|
sysroot was updated as expected.
|
|
|
|
.. code-block:: bash
|
|
|
|
find . -name lvgl-app
|
|
|
|
:ref:`flash_the_image` and run the benchmark application on the board.
|