-
Notifications
You must be signed in to change notification settings - Fork 1
Tag 8 Hello World in Yocto
Yocto basiert auf Bitbake. Zur Erinnerung, in Bitbake sind alle Software-Tools der Firma als Layers vorhanden (auch 3d party libraries wie QT). Ein Projekt selektiert sich daraus die nötigen. Ein Layer enthält mehrere Rezepte (.bb files) und ein Rezept enthält mehrere Tasks.
Yocto macht einige Schritte in einem Rezept. Z.B. Quellen besorgen (z.B. aus GIT von extern oder auch von intern), Quellen patchen (das ist oft nötig für Embedded Target Anpassungen), Compillieren, installieren (in ein Target-Filesystem, unter einem Folder, der später als Root-Directory auf dem Target installiert werden wird).
Alle Schritte siehe hier: http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#new-recipe-writing-a-new-recipe
Add our own application. First create a layer (meta-package) 'meta-lunix' (a layer contains n recipes) and our first recipe 'hello'.
cd ~/lunix/yocto/sources/poky
mkdir meta-lunix
mkdir meta-lunix/conf
mkdir meta-lunix/recipes-lunix
mkdir meta-lunix/recipes-lunix/hello
Add layer to configuration:
nano meta-lunix/conf/layer.conf
Content: # We have a conf and classes directory, add to BBPATH
BBPATH := "${BBPATH}:${LAYERDIR}"
# We have a packages directory, add to BBFILES
BBFILES := "${BBFILES} ${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
BBFILE_COLLECTIONS += "lunix"
BBFILE_PATTERN_jfa := "^${LAYERDIR}/"
BBFILE_PRIORITY_jfa := "5"
Download hello application:
cd ~/lunix/tmp
wget ftp://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz
tyr -xfz hello-2.7.tar.gz
md5sum hello-2.7/COPYING
md5sum hello-2.7.tar.gz
Create a bitbake command file for the hello application in our meta-lunix recipe. Use the md5-sum from above in the md5=... section. From the file COPYING into LIC_FILEC_CHECKSUM and from the .tar.gz into SRC_URI[md5sum].
(Yocto will lateron also download the application and build from source - as with any other package too.)
nano ~/lunix/yocto/sources/poky/meta-lunix/recipes-lunix/hello/hello_2.7.bb
DESCRIPTION = "GNU Helloworld application" SECTION = "examples" LICENSE = "GPLv3+" LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" PR = "r0" SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" SRC_URI[md5sum] = "fc01b05c7f943d3c42124942a2a9bb3a" inherit autotools gettext
Build the source (only of our hello package):
cd ~/lunix/yocto/sources/poky
MACHINE=udooneo source oe-init-build-env build-hello
We're in the build-hello directory now and (as in the very beginning with udooneo) we need to make known our new layer to Yocto. Go back into the main conf directory
cd ~/lunix/yocto/build
nano conf/bblayers.conf
Add one line to BBLAYERS like here the last one:
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "4"
BBFILES ?= ""
BBLAYERS = " \
/home/lunix/lunix/yocto/sources/poky/meta \
/home/lunix/lunix/yocto/sources/poky/meta-yocto \
/home/lunix/lunix/yocto/sources/poky/meta-lunix \
"
And again to local.conf we need to add the installation target. (Here is chosen what will actually be installed. Above what is available for the build in theory.). By the way, uncommenting BB_NUMBER_THREADS for parallel builds speeds things up ;)
nano conf/local.conf
Content
IMAGE_INSTALL_append = " hello"
Now build the whole image again as written at the very beginning of the page.
(Informationen waren von https://wiki.yoctoproject.org/wiki/How_do_I#Q:_How_do_I_put_my_recipe_into_Yocto.3F )
Mache ein Update von hello. Von V2.7 auf V2.9. Schritte: .bb-Datei umbenennen, die $(PV) Variable zeigt dann auf die neue Version (Product Version). Dann die Checksummen nochmal anpassen.
Download vom Morseprogramm Installation in Yocto Advanced: Einfügen in Autostart, sodass das nach dem Booten ertönt (Recherche)
Kernelparameter verändern. Ihr erinnert Euch bestimmt an die Konfiguration der Kerneloptionen. Sobald man einen passenden Kernel konfiguriert hat (mit den Methoden, die Ihr schon kennt, kernel downloaden, make config, make install, auf SD-Karte kopieren ...), kann man die so für gut befundenen Einstellungen nach Yocto übertragen. Z.B. einen Diff zwischen der Yocto-Config und der eigenen machen und dann die Änderungen wie folgt einpflegen (sie überschreiben vorhandene):
Beispiel, um eine 8250 UART zu aktivieren: Create a file named 8250.cfg in the files directory with the following content (without indentation):
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
Next, include this configuration fragment and extend the FILESPATH variable in your .bbappend file:
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://8250.cfg"
(Entnommen aus: http://www.yoctoproject.org/docs/1.6.1/kernel-dev/kernel-dev.html#changing-the-configuration )