Open main menu

DAVE Developer's Wiki β

Changes

no edit summary
{{InfoBoxBottom}}
=<section begin=History==/>{| classstyle="wikitableborder-collapse:collapse; " border!colspan="4" style="1width:100%; text-align:left"; border-bottom:solid 2px #ededed"|History|- !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!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
|-
| Oct 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}}| Buildroot 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
|-
!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 ==
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.
==DonwloadingVirtual Machine requirements ==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>.
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>).
=== Linux kernel ===
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>)** <code>qt-webwebkit-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
* '''python3''' interpreter including <code>pyhton3python3-ssl</code>, <code>pyhtonpython-flask</code>, <code>pyhtonpython-httplib2</code>, <code>pyhtonpython-jinja2</code>, <code>pyhtonpython-pip</code>, <code>pyhtonpython-py</code>, <code>pyhtonpython-pymodbus</code>, <code>pyhtonpython-pymysql</code>, <code>pyhtonpython-pyqt5pyusb</code>, <code>pyhtonpython-pyusbserial</code>, <code>pyhtonpython-serialrequests</code>, <code>pyhtonpython-requestsschedule</code>, <code>pyhtonpython-schedulesocketio</code>, <code>pyhtonpython-socketiosetupotools</code>, * web server: <code>pyhton-setupotoolslighthttpd</code>* luadatabase: <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>
* Javascript: <code>angularjs</code>, <code>bootstrap</code>
* package managers: <code>opkg</code>, <code>rpm</code>
=== Build the targets ===
==== 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 issuefor the file <code>package/qt5/qt5webkit/qt5webkit.mk</code>:
<syntaxhighlightlang="diff">
QT5WEBKIT_CONF_OPTS += \
+ -DCMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT=ON \
==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
8,253
edits