User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

TUTORIAL: buildroot für Qt

Sat Oct 18, 2014 1:44 pm

!WORK IN PROGRESS!
Falls sich Fehler eingeschlichen haben, tut mir das leid und ich bitte euch mir diese per PN zu melden. Danke!

Hier mein step-by-step Tutorial für Qt 5.11.3 mit RPi 3 B+, basierend auf https://buildroot.org
Da sich dieses Tutorial eher an Anfänger richtet, stelle ich keine fertige defconfig zur Verfügung. Wer sich mit buildroot auskennt, hat vermutlich schon eine funktionierende Konfiguration. Hier soll Schritt für Schritt erklärt werden was wofür und warum notwendig ist.

Wenn "raspberrypi.local" nicht funktioniert, nutze bitte die IP Adresse der Raspberry Pi

Features
  • Readonly Basissystem mit /home in einer Ramdisk (Netzteil kann einfach gezogen werden ohne das Dateisystem zu beschädigen)
  • Kommunikation via SSH über Ethernet oder WiFi
  • Alle Funktionen der Raspberry Pi sind verfügbar (Display, Kamera, Bluetooth, WiFi, GPIOs, SPI, I2C,...)
  • ALSA mit gängigsten Codecs
  • vollständiges Qt 5.11.3 (ja, auch QtWebEngine und QtPositioning funktionieren)
  • Zeitsynchronisation via NTP oder RTC (wenn keine Internetverbindung verfügbar ist bitte RTC verwenden!)
  • Kein Desktop notwendig, Programm startet direkt auf der Pi
  • On-Device-Debugger

Hardware

Grundsätzlich benötigt ihr nur eine Raspberry Pi inkl. Grundausstattung. Ich nutze diese Umgebung aber für ein kleines eigenständiges Gerät und habe deshalb folgende Hardware im Einsatz:

Linux Host vorbereiten (zum Beispiel Ubuntu x64)

Update

Code: Select all

sudo apt-get update
sudo apt-get -y upgrade
Abhängigkeiten installieren

In der Dokumentation von buildroot findet ihr eine Liste aller Befehle/Pakete die auf dem Hostsystem verfügbar sein müssen.
Bitte prüft die Verfügbarkeit bevor ihr weitermacht.

Bei mir habe ich folgendes installiert

Code: Select all

sudo apt-get install make build-essential gcc g++ bzr cvs git mercurial subversion default-jdk default-jre asciidoc w3m dblatex graphviz python-matplotlib
Außerdem muss QtCreator installiert werden (ich nutze Qt 5.11.3 auf Ubuntu 18.04). Hier bekommt ihr den Qt Installer für Linux x64. Damit kann man schon Qt Programme (Architektur: x86) erstellen, die können allerdings nicht auf der Raspberry Pi (Architektur: arm) laufen. Qt für Raspberry Pi wird ganz am Ende dieses Tutorials in QtCreator konfiguriert.

Code: Select all

cd ~/Downloads
wget https://download.qt.io/official_releases/qt/5.11/5.11.3/qt-opensource-linux-x64-5.11.3.run
sudo ./qt-opensource-linux-x64-5.11.3.run
Am besten installiert ihr Qt ebenfalls in /opt. Dazu sind allerdings administrative Rechte notwendig.


Image


... und wählt folgende Pakete aus


Image


Verzeichnis erstellen

Wurde das Buildrootsystem erfolgreich erstellt, benötigt ihr dieses Verzeichnis später noch quasi als Toolchain für QtCreator. Darum speichern wir das ganze Zeug an einer Stelle wo es nicht stört.

Code: Select all

sudo mkdir /opt/RaspberryPi
sudo chown 1000:1000 /opt/RaspberryPi
cd /opt/RaspberryPi
Oder, wenn man mehrere Benutzer auf dem Hostsystem nutzt, die uid/gid 1000 mit dem Usernamen/Gruppennamen ersetzen (uid/gid 1000 = default user/group)

Hier gehts weiter
Last edited by mline on Wed Mar 13, 2019 2:17 pm, edited 17 times in total.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot

Sat Oct 18, 2014 2:05 pm

Dieser Thread wurde wiederverwertet. Dieser Post und die nächsten beiden sind die original Posts von 2014
Wer ein sehr schnell bootendes System haben will sollte sich mal buildroot ansehen. Man kann damit ein System bauen das auf extrem langsamen Karten in etwa 5 Sekunden fertig gebootet ist. Weiter unten beschreibe ich noch den Bau eines ramfs-kernels mit dem das ganze noch weiter beschleunigt wird.
http://buildroot.uclibc.org/

Installation ist ganz einfach. Das letzte Release ( heute: buildroot-2014.08.tar.gz ) herunterladen und entpacken. Idealerweise hat man eine eigene Partition zur Verfügung um das Archiv dort zu entpacken. Ich nutze Ubuntu für buildroot also musste ich noch die Pakete bison und libncurses5-dev nachinstallieren. Man bekommt aber beim Buildvorgang eine Fehlermeldung sollte etwas fehlen.

Hat man entpackt öffnet man eine Konsole, navigiert in den entpackten Ordner und führt erstmal diesen Befehl aus:

Code: Select all

make raspberrypi_defconfig
Damit stellt man schon die wichtigsten Dinge für Raspberry Pi ein.

Als nächstes

Code: Select all

make menuconfig
Unter "Toolchain --->" ändert man die Option "Kernel Headers" auf "Linux 3.12.x kernel headers". Sonst alles so lassen wie es ist.
Unter "System configuration --->" sollte man bei "Root password" ein Passwort für root definieren. Das ist vor allem wichtig wenn man ssh installieren will. Aber vorsicht! Das Passwort für root ist in der Datei .config im Klartext gespeichert.
Unter "Kernel --->" ändert man die Option "Custom repository version" auf "rpi-3.12.y". Der default-Wert zeigt auf eine alte Version (3.12.26) des Kernels.
Unter "Target packages --->" kann man nun beliebige Pakete auswählen. Man muss dabei manchmal auf die Abhängigkeiten (zum Beispiel ...needs a toolchain w/ wchar) achten. Solche Sachen werden im Menü "Toolchain --->" aktiviert. Es kann auch vorkommen das erst ein Paket aktiviert werden muss (zum Beispiel midori needs libgtk2 and a toolchain w/ C++, wchar, threads), da muss man halt suchen ;)

Natürlich gilt hier: weniger ist mehr ;)
Änderungen an Sachen wo man sich nicht auskennt führen schnell dazu das garnichts mehr geht...

Jetzt kann man das Menü verlassen, mit Yes bestätigen.

Mit

Code: Select all

make
wird der "Bau" gestartet. Das dauert je nach Rechenleistung eine bis mehrere Stunden.
Ist der Vorgang abgeschlossen und die letzte Zeile sieht etwa so aus:

Code: Select all

/usr/bin/install -m 0644 support/misc/target-dir-warning.txt /home/blabla/buildroot/output/target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM
hat alles geklappt und man kann das ganze auf eine Speicherkarte geben.

Die Speicherkarte sollte eine kleine (32-100MB) FAT32 Partition sowie eine (ab 200MB) EXT4 Partition haben.

Im Ordner buildroot/output/images/ befindet sich der Kernel (zImage) sowie die Firmware im Ordner buildroot/output/images/rpi-firmware/
Diese Dateien kann man alle direkt so auf die FAT32 Partition kopieren.
Die Datei rootfs.tar beinhaltet die Verzeichnisstruktur und alle wichtigen Dateien. Man kann sie mit dem Befehl

Code: Select all

tar -xf rootfs.tar -C /pfad/zur/ext4/partition
auf die Speicherkarte übertragen.

Tja, das wars. Falls etwas nicht klappt schreibt es hier einfach rein.

Jetzt gehts um ramfs. Ein kleines System im RAM hat nicht nur Vorteile. Das sollte man beachten. Ändert man etwas am laufenden System und startet neu sind alle Änderungen weg. Dafür läuft das System aber unfassbar schnell ;)

Es sind nicht viele Änderungen zum vorigen System notwendig...

Als erstes sollte man den alten Kernel (zImage) sichern und dann ramfs aktivieren. Dazu wieder in das buildroot Verzeichnis und

Code: Select all

mkdir output/images/backup
cp output/images/zImage output/images/backup/
make menuconfig
ausführen.

Unter "Filesystem images --->" aktiviert man nun die Option "cpio the root filesystem (for use as an initial RAM filesystem)" und ändert "Compression method" auf lzo.
Danach das Menü verlassen und

Code: Select all

make
make linux-menuconfig
ausführen.

Unter "General setup --->" die Option "Initial RAM filesystem and RAM disk (initramfs/initrd) support" aktivieren. Die Option "Support initial ramdisks compressed using gzip" deaktiveren, die Option "Support initial ramdisks compressed using LZO" aktivieren. Bei "Initramfs source" trägt man den vollständigen Pfad zur Datei rootfs.cpio.lzo ein.

Menü wieder verlassen und

Code: Select all

make
ausführen. Man kann den Unterschied im Log oder an der Dateigröße von zImage erkennen. Der Kernel ist nun je nachdem wieviele Pakete man gewählt hat größer als vorher.

Die Speicherkarte benötigt nun nur mehr eine FAT32 Partition. Dort kopiert man nun wieder die Firmware-Dateien und zImage drauf.
In der Datei cmdline.txt müssen noch diese zwei Werte entfernt werden:
root=/dev/mmcblk0p2 rootwait

Was noch wichtig ist:
Da es sich dabei um ein System handelt wo man keine Änderungen speichern kann sollte man gut überlegen was man vorher alles braucht. Einstellungen am System erledigt man vor "make" im Ordner output/target/
Man muss dort auch schon alle Rechte korrekt vergeben da das genau so (bis auf den User und die Gruppe) ins Dateisystem übernommen wird. Außerdem gibt es die Möglichkeit pre-build und post-build Scripte ausführen zu lassen. Wie das geht und was da passiert müsst ihr euch aber selbst aus der Doku rauslesen
Last edited by mline on Wed Mar 13, 2019 1:40 pm, edited 2 times in total.
<~~>

dasebi
Posts: 1
Joined: Wed Nov 18, 2015 8:05 am

Re: TUTORIAL: buildroot

Wed Nov 18, 2015 8:07 am

Hallo,

Vielen Dank für deine super Anleitung.
Ich würde gerne noch den omxplayer einbauen. Könntest du noch beschreiben, wie man externe Pakete aufnimmt?

Vielen Dank!

lg
Sebi

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot

Wed Nov 18, 2015 8:11 pm

Hallo,

damit habe ich mich noch nicht beschäftigt. Hab die Sachen die ich gebraucht habe extra kompiliert und dann ins filesystem integriert.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot für Qt

Wed Mar 13, 2019 11:26 am

Alle Dateien und Ordner die wir in diesem Schritt Erstellen oder Ändern müsst findet ihr hier: /opt/RaspberryPi/buildroot-2019.02/board/raspberrypi
Ich werde diesen Pfad mit raspberrypi abkürzen.

Buildroot vorbereiten

Buildroot herunterladen und entpacken

Hier könnt ihr buildroot herunterladen. Wir benutzen das "Latest stable / long term support release: 2019.02".
Habt ihr das Archiv heruntergeladen, entpackt ihr es in den im Schritt zuvor erstellten Ordner /opt/RaspberryPi.

Code: Select all

cd /opt/RaspberryPi
wget https://buildroot.org/downloads/buildroot-2019.02.tar.gz
tar -xf buildroot-2019.02.tar.gz
Raspberry Pi Board Dateien sichern

Erstellt bitte im Ordner raspberrypi einen Unterordner "backup" und kopiert die Datei post-build.sh hinein. Wir werden diese in den nächsten Schritten verändern.

Code: Select all

cd buildroot-2019.02/board/raspberrypi
mkdir backup
cp post-build.sh backup
post-build Script anpassen

In die Datei post-build.sh muss ganz am Ende folgendes eingefügt werden

Code: Select all

nano post-build.sh

Code: Select all

if [ ! -d ${TARGET_DIR}/etc/ssh ]; then
    mkdir ${TARGET_DIR}/etc/ssh
fi

# Generate ssh RSA key
if [ ! -f ${TARGET_DIR}/etc/ssh/ssh_host_rsa_key ]; then
    ssh-keygen -f ${TARGET_DIR}/etc/ssh/ssh_host_rsa_key -N '' -t rsa
fi
chmod 0600 ${TARGET_DIR}/etc/ssh/ssh_host_rsa_key

# Generate ssh DSA key
if [ ! -f ${TARGET_DIR}/etc/ssh/ssh_host_dsa_key ]; then
    ssh-keygen -f ${TARGET_DIR}/etc/ssh/ssh_host_dsa_key -N '' -t dsa
fi
chmod 0600 ${TARGET_DIR}/etc/ssh/ssh_host_dsa_key

# Generate ssh ECDSA key
if [ ! -f ${TARGET_DIR}/etc/ssh/ssh_host_ecdsa_key ]; then
    ssh-keygen -f ${TARGET_DIR}/etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa -b 521
fi
chmod 0600 ${TARGET_DIR}/etc/ssh/ssh_host_ecdsa_key

# Generate ssh ED25519 key
if [ ! -f ${TARGET_DIR}/etc/ssh/ssh_host_ed25519_key ]; then
    ssh-keygen -f ${TARGET_DIR}/etc/ssh/ssh_host_ed25519_key -N '' -t ed25519
fi
chmod 0600 ${TARGET_DIR}/etc/ssh/ssh_host_ed25519_key
Hier werden einmalig die notwendigen Keys für SSH erstellt. Bei einem readonly Dateisystem ist dieser Schritt notwendig weil sonst bei jedem Neustart durch sshd neue Keys erstellen würde. Man würde beim Login also jedesmal eine Warnung bekommen und nicht wissen ob das System sicher ist.

patches erstellen

Erstellt bitte im Ordner raspberrypi einen Unterordner "patches". In diesem Ordner werden patches für die Pakete von buildroot abgelegt.

Code: Select all

mkdir patches
rootfs_overlay erstellen

Erstellt bitte im Ordner raspberrypi einen Unterordner "rootfs_overlay" und kopiert den Inhalt des Archivs hinein, welches ich hier in diesem Post angehängt habe. Darin befinden sich vorkonfigurierte Dateien aus dem Ordner raspberrypi/rootfs_overlay/etc die später beim Erstellen von Buildroot an die richtige Stelle kopiert werden bzw. vorhandene Standardkonfigurationen ersetzen.
Eine Datei die ihr (wenn ihr WiFi nutzen wollt) auf jeden Fall ändern müsst wäre raspberrypi/rootfs_overlay/etc/wpa_supplicant.conf. Dort müsst ihr die SSID und den Key eures WLANs eingeben.
Eventuell möchtet ihr statt DHCP eine statische IP-Adresse nutzen. Dann muss die Datei raspberrypi/rootfs_overlay/etc/network/interfaces geändert werden.

Code: Select all

mkdir rootfs_overlay
wget https://www.raspberrypi.org/forums/download/file.php?id=28889
tar -xf rootfs_overlay.tar.gz -C rootfs_overlay
users_tables.cfg erstellen

Code: Select all

nano users_tables.cfg
Als nächstes erstellt bitte im Ordner raspberrypi die Datei "users_tables.cfg" und fügt folgende Zeile ein

Code: Select all

pi -1 pi -1 =raspberry /home/pi /bin/sh adm,dialout,cdrom,sudo,audio,video,plugdev,users,input,netdevm,gpio,i2c,spi Default user

Bitte tragt in der Spalte 5 ( =raspberry ) euer Passwort ein mit einem = davor ein. Also zum Beispiel für P455W0rd

Code: Select all

pi -1 pi -1 =P455W0rd /home/pi /bin/sh adm,dialout,cdrom,sudo,audio,video,plugdev,users,input,netdevm,gpio,i2c,spi Default user
Das = vor dem Passwort gibt an, dass es sich bei dabei um Klartext handelt der erst verschlüsselt werden muss. Mehr zu dieser Datei hier.

Hier gehts weiter
Attachments
rootfs_overlay.tar.gz
(3.12 KiB) Not downloaded yet
Last edited by mline on Fri Mar 22, 2019 7:48 am, edited 5 times in total.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot für Qt

Wed Mar 13, 2019 11:30 am

Buildroot konfigurieren Teil 1

Für eine komfortable Konfiguriation bietet Buildroot mehrere GUIs. Mehr zu den verfügbaren GUIs findet ihr hier.
Wir benutzen in diesem Tutorial die simple Konfiguration in einem Terminal.

Zunächst muss Buildroot aber wissen, welches welches Modell der Pi wir benutzen. Mehr Informationen dazu findet ihr in der Datei readme.txt im Ordner /opt/RaspberryPi/buildroot-2019.02/board/raspberrypi

Als Beispiel nehme ich ab hier die Befehle für Raspberry Pi 3 B(+).
Führt in einem Terminal also zunächst folgende Befehle aus

Code: Select all

cd /opt/RaspberryPi/buildroot-2019.02
make raspberrypi3_defconfig
Damit wurde die Grundkonfiguration für eine Raspberry Pi 3 B(+) erstellt.

Danach kann die Konfiguration mit dem Befehl

Code: Select all

make menuconfig
gestartet werden.

Ihr solltet nun etwa folgendes sehen (die Pfadangaben stimmen nicht mit diesem Tutorial überein. Sorry ;) )

Image

Target options --->

Hier bitte nichts ändern!

Build options --->

Hier aktivieren wir zunächst den Compilercache.

Code: Select all

[*] Enable compiler cache
Damit wird das Kompilieren etwas beschleunigt falls man nochmal von vorne anfangen muss.

Der Pfad zu den Patches muss angegeben werden

Code: Select all

(board/raspberrypi3/patches) global patch directories
Achtet bitte darauf den richtigen Pfad - passend zur defconfig die ihr im vorigen Schritt gewählt habt - zu verwenden. Es handelt sich zwar bei Pi Zero, Pi 2 und Pi 3 derzeit noch um Symlinks auf den Ordner raspberrypi, aber das kann sich irgendwann ändern und dann würde der Pfad nicht mehr stimmen.

Toolchain --->

C library muss von uClibc-ng auf glibc umgestellt werden.

Code: Select all

C library (glibc)  --->
Für QtCreator benötigen wir außerdem noch einen Debugger

Code: Select all

[*] Build cross gdb for the host
[ ]   TUI support
[*]   Python support
[ ]   Simulator support
      GDB debugger Version (gdb 8.1.x)  --->
System configuration --->

Hostname und Banner könnt ihr euren Wünschen entsprechend anpassen.

Code: Select all

(raspberrypi) System hostname
(Welcome to Raspberry Pi) System banner
Devicemanagement muss auf eudev geändert werden

Code: Select all

/dev management (Dynamic using devtmpfs + eudev)  --->
Root login sowie login promt müssen deaktiviert werden. Keine Sorge, wir benutzen sudo und ein Login prompt wird trotzdem erscheinen (ist wohl ein Bug). Außerdem soll das Dateisystem readonly bleiben.

Code: Select all

[ ] Enable root login with password
    /bin/sh (busybox' default shell)  --->
[ ] Run a getty (login prompt) after boot  ----
[ ] remount root filesystem read-write during boot
Wer WiFi statt Ethernet nutzen will muss hier wlan0 statt eth0 eintragen

Code: Select all

(wlan0) Network interface to configure through DHCP
Ich habe es nicht getestet, aber ich vermute, wenn ihr eine statische IP-Adresse nutzt, wird diese Option ignoriert. Eventuell ist es notwendig, wlan0 oder eth0 hier zu löschen.

Die Zeitzone muss leider immer voreingestellt werden. Ich nutze UTC und ändere Zeitangaben in Programmen später direkt im Code.

Code: Select all

[*] Install timezone info
(default) timezone list
(Etc/UTC) default local time
Diese Option wird später außerdem durch Pakete erzwungen und kann nicht mehr deaktiviert werden.

Jetzt müssen noch die Pfade für die users tables und rootfs_overlay eingetragen werden

Code: Select all

(board/raspberrypi3/users_tables.cfg) Path to the users tables
(board/raspberrypi3/rootfs_overlay) Root filesystem overlay directories
Kernel --->

Keine Änderungen notwendig

Target packages --->

Diesen Punkt behandeln wir im Teil 2 im nächsten Post. Überspringen wir also erstmal

Filesystem images --->

Qt und alle Abhängigkeiten haben in 120MB nicht mehr Platz. Darum muss die initiale Größe für rootfs erhöht werden. In meinem Build braucht rootfs 400MB. Ich habe es erstmal auf 512MB gesetzt.

Code: Select all

[*] ext2/3/4 root filesystem
      ext2/3/4 variant (ext4)  --->
()    filesystem label
(512M) exact size
(0)   exact number of inodes (leave at 0 for auto calculation)
Bootloaders --->

Hier bitte nichts ändern!

Host utilities --->

Keine Änderungen notwendig

Legacy config options --->

Hier bitte nichts ändern!

Hier gehts weiter
Last edited by mline on Fri Mar 22, 2019 7:35 am, edited 2 times in total.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot für Qt

Wed Mar 13, 2019 12:33 pm

Buildroot konfigurieren Teil 2

Dies ist leider etwas schwer darzustellen. Daher trenne ich jeden Menüpunkt im Hauptmenü mit einer Linie. Ein Pfeil ( ---> ) bedeutet, dass es sich um ein Untermenü handelt, welches ihr mit <Select> aufrufen könnt.
Menüpunkte mit [*] müsst ihr mit der Leertaste aktivieren.
Drei Punkte ( ... ) stellen Menüpunkte dar, die ich zur besseren Übersicht weggelassen haben.

Target packages --->

#######################################################################################################

Audio and video applications --->

Zum testen ist aplay ganz hilfreich

Code: Select all

[*] alsa-utils  --->

Code: Select all

--- alsa-utils
...
[*]   aplay/arecord
Mit gstreamer werden später Multimediadateien verarbeitet. Diese Libraries sind für QtMultimedia und/oder QtWebEngine notwendig

Code: Select all

[*] gstreamer 1.x

Code: Select all

[*]   gst1-plugins-base  --->

Code: Select all

--- gst1-plugins-base
...
[*]   alsa (mandatory for audio playback)
...
[*]   ogg (*.ogg audio/video)
...
[*]   theora (*.ogg video)
[*]   vorbis (*.ogg audio)
Zurück mit <Exit>

Code: Select all

[*]   gst1-plugins-good  --->

Code: Select all

--- gst1-plugins-good
...
[*]   autodetect
...
[*]   id3demux (*.mp3 audio)
...
[*]   wavenc
...
[*]   lame (*.mp3 audio encoder)
[*]   mpg123 (*.mp3 audio)
...
[*]   flac (libFLAC)
...
[*]   souphttpsrc (http client)
[*]   speex
Zurück mit <Exit>

Code: Select all

[*]   gst1-plugins-bad  --->

Code: Select all

--- gst1-plugins-bad
...
[*]   id3tag
...
[*]   openh264
Zurück mit <Exit> <Exit>

#######################################################################################################

Debugging, profiling and benchmark --->

Zum debuggen benötigen wir auch den gdbserver

Code: Select all

[*] gdb
-*-   gdbserver
Zurück mit <Exit>

Fonts, cursors, icons, sounds and themes --->

Damit Text korrekt angezeigt wird, muss zumindest der Font Liberation aktiviert werden

Code: Select all

[*] Bitstream Vera
...
[*] DejaVu fonts
[*]   mono fonts (NEW)
[*]   sans fonts (NEW) 
[*]   serif fonts (NEW)
[*]   sans condensed fonts (NEW)
[*]   serif condensed fonts (NEW)
...
[*] Liberation (Free fonts)
[*]   mono fonts (NEW)
[*]   sans fonts (NEW)
[*]   serif fonts (NEW)
Zurück mit <Exit>

#######################################################################################################

Hardware handling --->

Firmware --->

Wer das Kameramodul einsetzen will sollte auch "Firmware to boot" auf "extended" ändern.

Code: Select all

...
[*] rpi-bt-firmware
[*] rpi-firmware
      Firmware to boot (default)  --->
[*]   Install DTB overlays
[ ]   vcdbg
[*] rpi-wifi-firmware
Zurück mit <Exit>

Keyboard tools und propritäre Treiber benötigen wir auch

Code: Select all

...
[*] kbd
...
[*] rpi-userland
Zurück mit <Exit>

#######################################################################################################

Libraries --->

Crypto --->

Zertifikate werden benötigt wenn QtWebEngine genutzt wird

Code: Select all

[*] CA Certificates
Zurück mit <Exit>

Graphics --->

Code: Select all

[*] libdrm  --->

Code: Select all

--- libdrm
...
[*]   vc4
Zurück mit <Exit>

Hardware handling --->

wiringPi ist nur optional. Wer es nicht braucht, braucht es auch nicht aktivieren.

Code: Select all

[*] wiringpi
Zurück mit <Exit> <Exit>

#######################################################################################################

Networking applications --->

In diesem Menü werden Netzwerktools wie bluez, NTP, SSH und wpa_supplicant konfiguriert.
iw ist optional und muss nicht aktiviert werden.

Code: Select all

...
[*] bluez-utils 5.x
[ ]   build OBEX support (NEW)
[*]   build CLI client
...
[*] iw
...
[*] ntp
...
[*] openssh
...
[*] wireless tools
...
[*] wpa_supplicant
[*]   Enable nl80211 support (NEW)
[*]   Enable EAP
[ ]   Enable HS20 (NEW)
[ ]   Enable syslog support (NEW)
[*]   Enable WPS
[*]   Install wpa_cli binary
[ ]   Install wpa_client shared library (NEW) 
[*]   Install wpa_passphrase binary
[ ]   Enable support for old DBus control interface (NEW)
[*]   Enable support for new DBus control interface
Zurück mit <Exit>

#######################################################################################################

Shell and utilities --->

screen ist optional und muss nicht aktiviert werden.

Code: Select all

[*] screen
[*] sudo
Zurück mit <Exit>

#######################################################################################################

Text editors and viewers --->

Für tests kann es hilfreich sein, einen praktischen Texteditor zu haben.

Code: Select all

[*] nano
Hier gehts weiter
Last edited by mline on Wed Mar 13, 2019 1:29 pm, edited 4 times in total.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot für Qt

Wed Mar 13, 2019 12:48 pm

Buildroot konfigurieren Teil 3

Dies ist leider etwas schwer darzustellen. Daher trenne ich jeden Menüpunkt im Hauptmenü mit einer Linie. Ein Pfeil ( ---> ) bedeutet, dass es sich um ein Untermenü handelt, welches ihr mit <Select> aufrufen könnt.
Menüpunkte mit [*] müsst ihr mit der Leertaste aktivieren.
Drei Punkte ( ... ) stellen Menüpunkte dar, die ich zur besseren Übersicht weggelassen haben.

Target packages --->

#######################################################################################################

Graphic libraries and applications (graphic/text) --->

Hier werden wir jetzt Qt konfigurieren. Bitte aktiviert exakt genau die selben Menüpunkte wie beschrieben.

Code: Select all

[*] Qt5  --->

Code: Select all

[*]   qt53d
[*]     MySQL Plugin
[*]     PostgreSQL Plugin
        SQLite 3 support (Qt SQLite)  --->
...
[*]       widgets module
...
[*]       eglfs support
(eglfs)   Default graphical platform
[*]       fontconfig support
[*]       harfbuzz support
[*]       GIF support
[*]       JPEG support
[*]       PNG support
[*]     DBus module
[*]     Enable ICU support
[*]     Enable Tslib support
[*]   qt5canvas3d
[*]   qt5charts
[*]   qt5connectivity
-*-   qt5declarative
-*-     quick module
[*]   qt5enginio
[*]   qt5graphicaleffects
[*]   qt5imageformats
[*]   qt5location
[*]   qt5multimedia
[*]   qt5quickcontrols
[*]   qt5quickcontrols2
[*]   qt5script
[*]   qt5scxml
[*]   qt5sensors
[*]   qt5serialbus
...
-*-   qt5svg
...
[*]   qt5virtualkeyboard
(all)   language layouts
...
[*]   qt5webchannel
[*]   qt5webkit
[ ]   qt5webkit-examples (NEW)
[*]   qt5webengine
[*]     proprietary codecs 
[*]     alsa
Nun so lange <Exit> wählen bis menuconfig fragt ob man Speichern will. Mit <Yes> beantworten und zum nächsten Schritt.

Hier gehts weiter
Last edited by mline on Wed Mar 13, 2019 1:30 pm, edited 2 times in total.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot für Qt

Wed Mar 13, 2019 12:59 pm

Buildroot build Teil 3

Nun folgt der einfachste Teil aber auch langwierigste Teil: das kompilieren.

Dazu führt ihr einfach folgenden Befehl aus:

Code: Select all

make
Je nachdem wie schnell eure CPU ist, braucht der build-Prozess schon mal mehrere Stunden. Bei meinem System (4x4GHz) dauert es etwa 3 Stunden.
Ist der Vorgang ohne Fehler abgeschlossen muss noch eine Änderung durchgeführt werden.

Im Ordner /opt/RaspberryPi/buildroot-2019.02/output/images/rpi-firmware findet ihr die beiden Dateien cmdline.txt und config.txt. Diese müsst ihr wie folgt ändern:

cmdline.txt

Code: Select all

dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootwait console=tty1
oder wenn man den bootprozess weitgehenst ausblenden will

Code: Select all

dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootwait console=tty3 quiet splash loglevel=0 logo.nologo vt.global_cursor_default=0
config.txt

Code: Select all

# For more options and information see
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# Some settings may impact device functionality. See link above for details

kernel=zImage

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
dtparam=spi=on

# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
#dtparam=audio=on

# Enable i2s audio (optional)
dtoverlay=hifiberry-dac
dtoverlay=i2s-mmap

# Fixes rpi3 ttyAMA0 serial console
dtoverlay=pi3-miniuart-bt

# Enable rpi3 ttyS0 serial console
enable_uart=1

# Rotate official touchscreen display
#lcd_rotate=2

# Disable splashscreen
disable_splash=1

# Enable RTC (optional)
dtoverlay=i2c-rtc,ds3231
Natürlich könnt ihr alles euren Wünschen entsprechend ändern.

Danach noch einmal den Befehl make ausführen

Code: Select all

make
Diesmal wird nur das Image für die Speicherkarte mit den beiden geänderten Dateien erstellt.
Nun könnt ihr das Image /opt/RaspberryPi/buildroot-2019.02/output/images/sdcard.img auf eine Speicherkarte schreiben, in die Pi einlegen und euer buildroot-System starten.

Hier gehts weiter
Last edited by mline on Fri Mar 22, 2019 7:54 am, edited 3 times in total.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot für Qt

Wed Mar 13, 2019 8:31 pm

Buildroot QtCreator einrichten

Abschliessend richten wir noch den im ersten Schritt installierten QtCreator ein. Startet dazu den QtCreator (befindet sich bei Ubuntu im Hauptmenü unter "Entwicklung") und öffnet das Einstellungsfenster mit Klick auf Menü Extras -> Einstellungen...
Im Einstellungsfenster wählt ihr erstmal den Punkt "Geräte" aus, wechselt den Tab auf Geräte und klickt auf Hinzufügen.

Image

Im Dialog "Einrichtung einer neuen Geräte-Konfiguration" wählt ihr den Punkt "Generisches Linux-Gerät". Im nächsten Dialog "Einrichtung einer neuen Geräte-Konfiguration für generisches Linux" trägt ihr dann die Daten für den Zugang per SSH ein. Also IP-Adresse der Pi, Name, Username und Passwort. Bei Klick auf Weiter wird die Verbindung getestet. Das Fenster mit der Ausgabe kann geschlossen werden und mit dem Button "Anwenden" sichern wir diese Einstellung.

Als nächstes wählt ihr den Menüpunkt "Kits" und den Tab Debugger.

Image

Klickt auf Hinzufügen und gebt folgende Daten in die Eingabefelder ein:
Name: GDB von Raspberry Pi
Pfad: /opt/RaspberryPi/buildroot-2019.02/output/host/bin/arm-buildroot-linux-gnueabihf-gdb

Mit dem Button "Anwenden" sichern und weiter zum Tab Compiler

Klickt hier auf Hinzufügen, dann im Dropdownmenü auf GCC und C und gebt folgende Daten in die Eingabefelder ein:
Name: Raspberry Pi GCC (C, arm 32bit)
Pfad: /opt/RaspberryPi/buildroot-2019.02/output/host/bin/arm-buildroot-linux-gnueabihf-gcc

Klickt nochmal auf Hinzufügen, dann im Dropdownmenü auf GCC und C++ und gebt folgende Daten in die Eingabefelder ein:
Name: Raspberry Pi GCC (C++, arm 32bit)
Compiler-Pfad: /opt/RaspberryPi/buildroot-2019.02/output/host/bin/arm-buildroot-linux-gnueabihf-g++

Mit dem Button "Anwenden" sichern und weiter zum Tab Qt Versionen

Klickt hier auf Hinzufügen, und wählt qmake im Verzeichnis /opt/RaspberryPi/buildroot-2019.02/output/host/bin aus.
Name der Version: Qt %{Qt:Version} Raspberry Pi GCC 32bit

Mit dem Button "Anwenden" sichern und weiter zum Tab Kits

Erneut auf Hinzufügen klicken und folgende Einstellungen wählen:
Name: Raspberry Pi
Gerätetyp: Generisches Linux-Gerät
Gerät: "Raspberry Pi (Vorgabe für Generisches Linux)" wird automatisch ausgewählt. Falls nicht tut dies bitte.
Sysroot: /opt/RaspberryPi/buildroot-2019.02/output/host/arm-buildroot-linux-gnueabihf/sysroot
Compiler C: Raspberry Pi GCC (C, arm 32bit)
Compiler C++: Raspberry Pi GCC (C++, arm 32bit)
Debugger: GDB von Raspberry Pi
Qt-Version: Qt 5.11.3 Raspberry Pi GCC 32bit

Mit dem Button "Ok" sichern und Dialog schliessen.

QtCreator ist nun konfiguriert und ihr könnt beim erstellen eines Projekts das Kit "Raspberry Pi" auswählen.
<~~>

User avatar
mline
Posts: 1215
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: TUTORIAL: buildroot für Qt

Fri Mar 22, 2019 7:53 am

Änderungen:
  • cmdline.txt erweitert
  • Fehler bei "System configuration" behoben
  • rootfs_overlay Archiv hochgeladen.
  • fstab korrigiert
  • Touchdisplay Hintergrundbeleuchtung wird beim herunterfahren deaktiviert
<~~>

Return to “Deutsch”