Difference between revisions of "MISC-AN-001: Creating a root file system using Buildroot"

From DAVE Developer's Wiki
Jump to: navigation, search
(15 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
{{InfoBoxBottom}}
 
{{InfoBoxBottom}}
  
<section begin=History/>
+
==History==
{| style="border-collapse:collapse; "
+
 
!colspan="4" style="width:100%; text-align:left"; border-bottom:solid 2px #ededed"|History
+
{| class="wikitable" border="1"
|-
+
!Date
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Date
+
!Version
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Version
 
 
|-
 
|-
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|{{oldid|18867|2023/10/18}}
+
| Oct 2023
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|buildroot 2022.05
+
| Buildroot 2022.05
 
|-
 
|-
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000"|2023/10/31
 
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000"|Add buildroot 2023.08 version
 
 
|}
 
|}
 
  
 
== Introduction ==
 
== Introduction ==
Line 27: Line 23:
 
The test bed used for this application note is composed of the same hardware/software platform delivered along with the [[DESK-MX6UL-L | DESK-MX6UL-L]]. About Buildroot, the version [https://buildroot.org/downloads/buildroot-2022.05.tar.gz buildroot-2022.05] was used.
 
The test bed used for this application note is composed of the same hardware/software platform delivered along with the [[DESK-MX6UL-L | DESK-MX6UL-L]]. About Buildroot, the version [https://buildroot.org/downloads/buildroot-2022.05.tar.gz buildroot-2022.05] was used.
  
== Virtual Machine requirements ==
+
==Donwloading, configuring and building==
The building process may requires higher resources than the original [[DESK-MX6UL-L | DESK-MX6UL-L]] MVM settings: this depends on the package selected in the <code>.config</code> file and theirs build resources.
 
 
 
For example: building the <code>qt-webkit</code> package will require a lot of resources so it is better to add more CPUs and more RAM to the VM like the following settings:
 
 
 
[[File:DESK-MX6UL-MVM_buildroot.png|thumb|center|600px| MVM with 10 CPU cores and 16GB of RAM]]
 
 
 
==Downloading, configuring and building==
 
 
This process is straightforward. Once the file [https://buildroot.org/downloads/buildroot-2022.05.tar.gz <code>buildroot-2022.05.tar.gz</code>] is downloaded and decompressed on your Linux host machine, get into the Buildroot directory, and run <code>make menuconfig</code>.
 
This process is straightforward. Once the file [https://buildroot.org/downloads/buildroot-2022.05.tar.gz <code>buildroot-2022.05.tar.gz</code>] is downloaded and decompressed on your Linux host machine, get into the Buildroot directory, and run <code>make menuconfig</code>.
  
Line 52: Line 41:
 
That's it: after saving your configuration, and exiting <code>menuconfig</code>, you can start the build process by simply issuing the <code>make</code> command.
 
That's it: after saving your configuration, and exiting <code>menuconfig</code>, you can start the build process by simply issuing the <code>make</code> command.
  
For your sake of convenience, the created <code>.config</code> file can be downloaded from [https://cloud.dave.eu/public/buildroot2022-config here] (rename it as <code>.config</code>).
+
For your sake of convenience, the created .config file can be downloaded from [here].
  
 
=== Linux kernel ===
 
=== Linux kernel ===
Line 64: Line 53:
  
 
Here below a list of most important selected packages:
 
Here below a list of most important selected packages:
* '''Qt5.15''' libraries including: <code>fontconfig</code>, <code>DBus</code>, <code>qt5declarative</code>, <code>qt5multimedia</code>, <code>qt5quickcontrols</code>, <code>qt5quickcontrols2</code>, <code>qt5sensors</code>, <code>qt5serialbus</code>, <code>qt5serialport</code>, <code>qtextserialport</code>, <code>Qt SQlite</code> and the very important <code>qt5webkit</code> (and <code>qt5webchannel</code>, <code>qt5websockets</code>)
+
* '''Qt5.15''' libraries including: <code>qt5declarative</code>, <code>qt5quickcontrols</code>, <code>qt5quickcontrols2</code>, <code>qt5sensors</code>, <code>qt5serialbus</code>, <code>qt5serialport</code>, <code>Qt SQlite</code> and the very important <code>qt5webkit</code>  
** <code>qt-webkit-kiosk</code> browser can be used for creating a GUI with an embedded browser as a Kiosk application has been included too
+
** <code>qt-web-kiosk</code> browser can be used for creating a GUI with an embedded browser as a Kiosk application has been included too
 
* framebuffer utilities like: <code>fbset</code>, <code>fbv</code>, <code>fbgrab</code> and the <code>fb-test</code> application
 
* framebuffer utilities like: <code>fbset</code>, <code>fbv</code>, <code>fbgrab</code> and the <code>fb-test</code> application
* '''python3''' interpreter including <code>python3-ssl</code>, <code>python-flask</code>, <code>python-httplib2</code>, <code>python-jinja2</code>, <code>python-pip</code>, <code>python-py</code>, <code>python-pymodbus</code>, <code>python-pymysql</code>, <code>python-pyusb</code>, <code>python-serial</code>, <code>python-requests</code>, <code>python-schedule</code>, <code>python-socketio</code>, <code>python-setupotools</code>
+
* '''python3''' interpreter including <code>pyhton3-ssl</code>, <code>pyhton-flask</code>, <code>pyhton-httplib2</code>, <code>pyhton-jinja2</code>, <code>pyhton-pip</code>, <code>pyhton-py</code>, <code>pyhton-pymodbus</code>, <code>pyhton-pymysql</code>, <code>pyhton-pyqt5</code>, <code>pyhton-pyusb</code>, <code>pyhton-serial</code>, <code>pyhton-requests</code>, <code>pyhton-schedule</code>, <code>pyhton-socketio</code>, <code>pyhton-setupotools</code>
* web server: <code>lighthttpd</code>
+
* lua
* database: <code>sqlite3</code>
+
* network applications: <code>avahi</code>, <code>bluez</code>, <code>iptables</code>, <code>iw</code>, <code>lighthttpd</code>, <code>ntp</code>, <code>openssl</code>, <code>openssh</code>, <code>vsftpd</code>, <code>wget</code>
* network applications: <code>avahi</code>, <code>bluez</code>, <code>iptables</code>, <code>iw</code>, <code>ntp</code>, <code>openssl</code>, <code>openssh</code>, <code>vsftpd</code>, <code>wget</code>
 
 
* Javascript: <code>angularjs</code>, <code>bootstrap</code>
 
* Javascript: <code>angularjs</code>, <code>bootstrap</code>
* package managers: <code>opkg</code>, <code>rpm</code>
+
* <code>opkg</code>, <code>rpm</code>
  
 
=== Build the targets ===
 
=== Build the targets ===
Line 104: Line 92:
  
 
==== Qt5 webkit build error ====
 
==== Qt5 webkit build error ====
The Qt5 building has an error on producing the <code>qt-webkit-kiosk</code> artifacts. Following [https://patchwork.ozlabs.org/project/buildroot/patch/20220929181350.1026033-1-thomas.ballasi@savoirfairelinux.com/ this thread] you can find a patch for fixing the issue for the file <code>package/qt5/qt5webkit/qt5webkit.mk</code>:
+
The Qt5 building has an error on producing the <code>qt-webkit-kiosk</code> artifacts. Following [https://patchwork.ozlabs.org/project/buildroot/patch/20220929181350.1026033-1-thomas.ballasi@savoirfairelinux.com/ this thread] you can find a patch for fixing the issue:
  
<syntaxhighlight lang="diff">
+
<syntaxhighlight>
 
  QT5WEBKIT_CONF_OPTS += \
 
  QT5WEBKIT_CONF_OPTS += \
 
+ -DCMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT=ON \
 
+ -DCMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT=ON \
Line 129: Line 117:
  
 
==Buildroot file system on the target==
 
==Buildroot file system on the target==
The created root file system can be extracted in a [[DESK-MX6UL-L/General/DVDK_Virtual_Machine | Virtual Machine]] local directory that can be used for starting the rfs via <code>nfs</code>:
 
 
<pre class="workstation-terminal">
 
dvdk@vagrant:~/buildroot$ mkdir rfs && cd rfs
 
dvdk@vagrant:~/buildroot/rfs$ sudo tar jxpf ../buildroot-2022.05/output/images/rootfs.tar.bz2
 
dvdk@vagrant:~/buildroot/rfs$
 
</pre>
 
 
Starting the root file system in the target will ''welcome'' you with the classic prompt:
 
 
<pre>
 
...
 
...
 
[    3.412976] VFS: Mounted root (ext4 filesystem) on device 179:2.
 
[    3.421286] devtmpfs: mounted
 
[    3.426837] Freeing unused kernel image (initmem) memory: 1024K
 
[    3.433614] Run /sbin/init as init process
 
[    3.943521] systemd[1]: systemd 250 running in system mode (-PAM -AUDIT -SELINUX -APPARMOR -IMA -SMACK -SECCOMP -GCRYPT -GNUTLS +OPENSSL -ACL +BLKID -CURL -ELFUTILS -FIDO2 -IDN2 -IDN -IPTC +KMOD -LIBCRYPTSETUP -LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE -BZIP2 -LZ4 -XZ +ZLIB -ZSTD -BPF_FRAMEWORK -XKBCOMMON -UTMP -SYSVINIT default-hierarchy=unified)
 
[    3.976207] systemd[1]: Detected architecture arm.
 
 
Welcome to Buildroot 2022.05!
 
 
[    4.023816] systemd[1]: Hostname set to <buildroot>.
 
[    5.136734] systemd[1]: Queued start job for default target Multi-User System.
 
[    5.150596] systemd[1]: Created slice Slice /system/modprobe.
 
[  OK  ] Created slice Slice /system/modprobe.
 
[    5.193797] systemd[1]: Created slice Slice /system/serial-getty.
 
[  OK  ] Created slice Slice /system/serial-getty.
 
...
 
...
 
[  OK  ] Started Serial Getty on ttymxc0.
 
[  OK  ] Reached target Login Prompts.
 
        Starting OpenSSH server daemon...
 
[  OK  ] Started Tiny HTTP Daemon.
 
[  OK  ] Started vsftpd FTP server.
 
[  18.251565] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
 
[  18.259328] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
 
[  OK  ] Started OpenSSH server daemon.
 
[  OK  ] Started Network Time Service.
 
[  OK  ] Started Lighttpd Daemon.
 
[  OK  ] Started Avahi mDNS/DNS-SD Stack.
 
[  OK  ] Reached target Multi-User System.
 
 
Welcome to Buildroot
 
buildroot login:
 
</pre>
 
 
Then, the main applications will show theirs version:
 
 
<pre>
 
root@buildroot:/root# python3 --version
 
Python 3.10.4
 
root@buildroot:/root# pip --version
 
pip 21.2.4 from /usr/lib/python3.10/site-packages/pip (python 3.10)
 
root@buildroot:/root# sqlite3 --version
 
3.38.5 2022-05-06 15:25:27 78d9c993d404cdfaa7fdd2973fa1052e3da9f66215cff9c5540ebe55c407d9fe
 
root@buildroot:/root# lighttpd -v
 
lighttpd/1.4.64 (ssl) - a light and fast webserver
 
root@buildroot:/root# gst-launch-1.0 --version
 
gst-launch-1.0 version 1.20.1
 
GStreamer 1.20.1
 
Unknown package origin
 
root@buildroot:/root#
 
</pre>
 
 
Finally, the <code>qt-webkit-kiosk</code>:
 
 
<pre>
 
root@buildroot:/home# qt-webkit-kiosk --version -platform linuxfb
 
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
 
Build with: Qt = 5.15.8 ; WebKit = 5.212.0
 
Runing with: Qt = 5.15.8 ; WebKit = "602.1"
 
>> Version option in command prompt...
 
 
1.99.11-dev
 
 
root@buildroot:/home#
 
</pre>
 
 
and then, if launched with the proper parameters, will display the Google web site:
 
 
<pre>
 
root@buildroot:/home# qt-webkit-kiosk -u https://www.google.it -platform linuxfb
 
</pre>
 
 
[[File:Qt-webkit-kiosk.png|thumb|center|600px| qt-webkit-kiosk (Google) on AXEL ULite EVK]]
 
 
==buildroot 2023.08==
 
In the same way, the latest <code>buildroot</code> version can be built: with this version, the Qt6 library is available and some packages are the latest version too.
 
 
<pre>
 
root@buildroot:/root# ls -la /usr/lib/libQt6*
 
lrwxrwxrwx    1 root    root            15 Oct 29  2023 /usr/lib/libQt6Core.so -> libQt6Core.so.6
 
lrwxrwxrwx    1 root    root            19 Oct 29  2023 /usr/lib/libQt6Core.so.6 -> libQt6Core.so.6.4.3
 
-rwxr-xr-x    1 root    root      5656884 Oct 31  2023 /usr/lib/libQt6Core.so.6.4.3
 
lrwxrwxrwx    1 root    root            15 Oct 29  2023 /usr/lib/libQt6DBus.so -> libQt6DBus.so.6
 
lrwxrwxrwx    1 root    root            19 Oct 29  2023 /usr/lib/libQt6DBus.so.6 -> libQt6DBus.so.6.4.3
 
-rwxr-xr-x    1 root    root        750084 Oct 31  2023 /usr/lib/libQt6DBus.so.6.4.3
 
lrwxrwxrwx    1 root    root            14 Oct 29  2023 /usr/lib/libQt6Gui.so -> libQt6Gui.so.6
 
lrwxrwxrwx    1 root    root            18 Oct 29  2023 /usr/lib/libQt6Gui.so.6 -> libQt6Gui.so.6.4.3
 
-rwxr-xr-x    1 root    root      6442292 Oct 31  2023 /usr/lib/libQt6Gui.so.6.4.3
 
lrwxrwxrwx    1 root    root            18 Oct 29  2023 /usr/lib/libQt6Network.so -> libQt6Network.so.6
 
lrwxrwxrwx    1 root    root            22 Oct 29  2023 /usr/lib/libQt6Network.so.6 -> libQt6Network.so.6.4.3
 
-rwxr-xr-x    1 root    root      1608904 Oct 31  2023 /usr/lib/libQt6Network.so.6.4.3
 
lrwxrwxrwx    1 root    root            20 Oct 29  2023 /usr/lib/libQt6SerialBus.so -> libQt6SerialBus.so.6
 
lrwxrwxrwx    1 root    root            24 Oct 29  2023 /usr/lib/libQt6SerialBus.so.6 -> libQt6SerialBus.so.6.4.3
 
-rwxr-xr-x    1 root    root        289148 Oct 31  2023 /usr/lib/libQt6SerialBus.so.6.4.3
 
lrwxrwxrwx    1 root    root            21 Oct 29  2023 /usr/lib/libQt6SerialPort.so -> libQt6SerialPort.so.6
 
lrwxrwxrwx    1 root    root            25 Oct 29  2023 /usr/lib/libQt6SerialPort.so.6 -> libQt6SerialPort.so.6.4.3
 
-rwxr-xr-x    1 root    root        108220 Oct 31  2023 /usr/lib/libQt6SerialPort.so.6.4.3
 
lrwxrwxrwx    1 root    root            14 Oct 29  2023 /usr/lib/libQt6Sql.so -> libQt6Sql.so.6
 
lrwxrwxrwx    1 root    root            18 Oct 29  2023 /usr/lib/libQt6Sql.so.6 -> libQt6Sql.so.6.4.3
 
-rwxr-xr-x    1 root    root        296632 Oct 31  2023 /usr/lib/libQt6Sql.so.6.4.3
 
lrwxrwxrwx    1 root    root            14 Oct 29  2023 /usr/lib/libQt6Svg.so -> libQt6Svg.so.6
 
lrwxrwxrwx    1 root    root            18 Oct 29  2023 /usr/lib/libQt6Svg.so.6 -> libQt6Svg.so.6.4.3
 
-rwxr-xr-x    1 root    root        337404 Oct 31  2023 /usr/lib/libQt6Svg.so.6.4.3
 
lrwxrwxrwx    1 root    root            21 Oct 29  2023 /usr/lib/libQt6SvgWidgets.so -> libQt6SvgWidgets.so.6
 
lrwxrwxrwx    1 root    root            25 Oct 29  2023 /usr/lib/libQt6SvgWidgets.so.6 -> libQt6SvgWidgets.so.6.4.3
 
-rwxr-xr-x    1 root    root        34172 Oct 31  2023 /usr/lib/libQt6SvgWidgets.so.6.4.3
 
lrwxrwxrwx    1 root    root            18 Oct 29  2023 /usr/lib/libQt6Widgets.so -> libQt6Widgets.so.6
 
lrwxrwxrwx    1 root    root            22 Oct 29  2023 /usr/lib/libQt6Widgets.so.6 -> libQt6Widgets.so.6.4.3
 
-rwxr-xr-x    1 root    root      6604008 Oct 31  2023 /usr/lib/libQt6Widgets.so.6.4.3
 
root@buildroot:/root#
 
</pre>
 
 
=== Packages application version ===
 
<pre>
 
root@buildroot:/root# python3 --version
 
Python 3.11.5
 
root@buildroot:/root# node --version
 
v16.20.0
 
root@buildroot:/root# sqlite3 --version
 
3.42.0 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0
 
root@buildroot:/root# gst-launch-1.0 --version
 
gst-launch-1.0 version 1.22.2
 
GStreamer 1.22.2
 
root@buildroot:/root#
 
</pre>
 
 
=== Use cases ===
 
==== node ====
 
Using the <code>nodejs</code> Javascript runtime it is possible to easily create an embedded webserver with few lines of code:
 
 
<pre>
 
root@buildroot:/root# cat server.js
 
const http = require('http');
 
 
const hostname = '192.168.0.90';
 
const port = 3000;
 
 
const server = http.createServer((req, res) => {
 
          res.statusCode = 200;
 
          res.setHeader('Content-Type', 'text/plain');
 
          res.end('Hello World\n');
 
});
 
 
server.listen(port, hostname, () => {
 
          console.log(`Server running at http://${hostname}:${port}/`);
 
});
 
root@buildroot:/root# node server.js
 
Server running at http://192.168.0.90:3000/
 
 
</pre>
 
 
and the web server can be contacted from the network at its IP address:
 
 
[[File:AXEL-ULite-nodejsFirefox.png | thumb | 600px | center | nodeJS web server]]
 
 
==== gstreamer ====
 
* file: BigBuckBunny_640x360.mp4
 
* video: MPEG-4 video 4:2:0 @ 640x360 resolution
 
* gstreamer pipeline
 
 
gst-launch-1.0 playbin uri=file:///root/BigBuckBunny_640x360.mp4
 
 
<pre>
 
root@buildroot:/root# gst-launch-1.0 playbin uri=file:///root/BigBuckBunny_640x360.mp4
 
Setting pipeline to PAUSED ...
 
Pipeline is PREROLLING ...
 
Redistribute latency...
 
Redistribute latency...
 
Pipeline is PREROLLED ...
 
Setting pipeline to PLAYING ...
 
Redistribute latency...
 
New clock: GstSystemClock
 
0:04:28.2 / 0:09:56.5 (45.0 %)
 
</pre>
 
 
Using the <code>imxpxpvideosink</code> plugin, i.e. using the PXP cell for helping the video rendering, the CPU load is around 50%:
 
 
gst-launch-1.0 filesrc location=/root/BigBuckBunny_640x360.mp4 ! decodebin ! videoconvert ! imxpxpvideosink
 
 
[[File:AXEL-ULite-buildroot-gstreamer2.png | thumb | center| 1000px| gstreamer CPU load using <code>imxpxpvideosink</code>]]
 
 
 
[[File:Gstreamer-pxp.png | thumb | center| 1000px| Big Buck Bunny 640x360 MPEG-4: 53% CPU load]]
 
 
==Binary artifacts ==
 
buildroot binary artifacts (root file system, kernel+dtb and SDK) can be downloaded - for both versions - from DAVE Embedded Systems [https://cloud.dave.eu/public/buildroot-axel-ulite cloud server]
 
 
'''N.B.''' <code>config</code> file should be renamed as <code>.config</code> in the buildroot directory before starting the build process
 

Revision as of 13:07, 18 October 2023

Info Box

History[edit | edit source]

Date Version
Oct 2023 Buildroot 2022.05

Introduction[edit | edit source]

By default, AXEL ULite comes with a DESK-MX6UL-L Yocto distribution. Nevertheless, other distributions can be used as well. This application note shows how to run one of them, Buildroot.

Buildroot is known to be very simple to configure and build. An exhaustive discussion of Buildroot is beyond the scope of this application note. The interested reader can refer for example to this presentation which compares in detail Yocto and Buildroot.

The test bed used for this application note is composed of the same hardware/software platform delivered along with the DESK-MX6UL-L. About Buildroot, the version buildroot-2022.05 was used.

Donwloading, configuring and building[edit | edit source]

This process is straightforward. Once the file buildroot-2022.05.tar.gz is downloaded and decompressed on your Linux host machine, get into the Buildroot directory, and run make menuconfig.

Buildroot make menuconfig

Then enter the Target options menu and select:

  • ARM (little endian) for Target Architecture
  • cortex-A7 for Target Architecture Variant

as shown in the following picture.

Buildroot make menuconfig


Another important configuration is the Freescale i.MX Libraries settings for i.MX6UL processor and its imx-tools (imx-codec, imx-kobs, firmware)

i.MX libraries


That's it: after saving your configuration, and exiting menuconfig, you can start the build process by simply issuing the make command.

For your sake of convenience, the created .config file can be downloaded from [here].

Linux kernel[edit | edit source]

The latest Linux kernel version provided in the DAVE' git repositories can be used for building the kernel image too.

The kernel tarball can be copied into the proper Buildroot directory:

Linux kernel tarball

Package list[edit | edit source]

The root file system package composition has been created for a list of packages commonly used for creating a root file system good for all seasons.

Here below a list of most important selected packages:

  • Qt5.15 libraries including: qt5declarative, qt5quickcontrols, qt5quickcontrols2, qt5sensors, qt5serialbus, qt5serialport, Qt SQlite and the very important qt5webkit
    • qt-web-kiosk browser can be used for creating a GUI with an embedded browser as a Kiosk application has been included too
  • framebuffer utilities like: fbset, fbv, fbgrab and the fb-test application
  • python3 interpreter including pyhton3-ssl, pyhton-flask, pyhton-httplib2, pyhton-jinja2, pyhton-pip, pyhton-py, pyhton-pymodbus, pyhton-pymysql, pyhton-pyqt5, pyhton-pyusb, pyhton-serial, pyhton-requests, pyhton-schedule, pyhton-socketio, pyhton-setupotools
  • lua
  • network applications: avahi, bluez, iptables, iw, lighthttpd, ntp, openssl, openssh, vsftpd, wget
  • Javascript: angularjs, bootstrap
  • opkg, rpm

Build the targets[edit | edit source]

It is enough tun run the make command and buildroot will start building the toolchain and then cross-compiling the overall selected packages.

Once the build process has been completed, the output/images directory will contain the binary artifact:

dvdk@vagrant:~/buildroot/buildroot-2022.05$ ls -la output/images/
total 769832                                                                                                                                                  
drwxr-xr-x 2 dvdk dvdk      4096 Oct 17 09:17 .
drwxrwxr-x 6 dvdk dvdk      4096 Oct 14 22:54 ..
-rwxr-xr-x 1 dvdk dvdk     32964 Oct 16 11:07 imx6ul-axelulite-cb003a.dtb
-rw-r--r-- 1 dvdk dvdk 293242880 Oct 18 13:19 rootfs.tar
-rw-r--r-- 1 dvdk dvdk  92090639 Oct 18 13:19 rootfs.tar.bz2
-rw-r--r-- 1 dvdk dvdk   7413264 Oct 16 11:07 uImage
dvdk@vagrant:~/buildroot/buildroot-2022.05$ 

If the SDK is required for building the application in the building environment, it is possible to generate the SDK using:

make sdk

and this will produce:

dvdk@vagrant:~/buildroot/buildroot-2022.05$ ls -la output/images/arm-*
-rw-r--r-- 1 dvdk dvdk 395504251 Oct 17 10:26 output/images/arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz
dvdk@vagrant:~/buildroot/buildroot-2022.05$ 

Qt5 webkit build error[edit | edit source]

The Qt5 building has an error on producing the qt-webkit-kiosk artifacts. Following this thread you can find a patch for fixing the issue:

 QT5WEBKIT_CONF_OPTS += \
+	-DCMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT=ON \
 	-DENABLE_TOOLS=OFF \
 	-DPORT=Qt \
 	-DPYTHON_EXECUTABLE=$(HOST_DIR)/bin/python3 \
 	-DSHARED_CORE=ON \
 	-DUSE_LIBHYPHEN=OFF
 
+QT5WEBKIT_INSTALL_STAGING_OPTS = install/fast
+
+define QT5WEBKIT_INSTALL_TARGET_CMDS
+	$(TARGET_MAKE_ENV) $(BR2_CMAKE) --install $(QT5WEBKIT_BUILDDIR) \
+		--prefix $(TARGET_DIR)/usr
+endef
+
 $(eval $(cmake-package))

Adding further packages[edit | edit source]

In real world applications, additional packages are usually added by selecting them under the Target packages item of the configuration menu. Just look at the packages directory to see which ones are available out of the box. To add further packages, please refer to this link.

Buildroot file system on the target[edit | edit source]