MISC-AN-001: Creating a root file system using Buildroot

From DAVE Developer's Wiki
Revision as of 15:08, 18 October 2023 by U0007 (talk | contribs) (Buildroot file system on the target)

Jump to: navigation, search
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 (rename it as .config).

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
  • web server: lighthttpd
  • database: sqlite3
  • network applications: avahi, bluez, iptables, iw, 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]

Starting the root file system in the target will welcome you with the classic prompt:

...
...
[    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:

Then, the main application will show their version:

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# 

Finally, the qt-webkit-kiosk:

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#

and then, if launched with the proper parameters, will display the Google web site:

root@buildroot:/home# qt-webkit-kiosk -u https://www.google.it -platform linuxfb
qt-webkit-kiosk (Google) on AXEL ULite EVK