Yocto Linux, bitbake und device tree

Gast #4787734
Lesenswert?

Hallo,

ich habe ein embedded Module von Digi und mit mit bitbake ein yocto nach 
deren Anleitung erzeugt.

Es gibt auf der Homepage vorgefertigte images, die auch tatsächlich nach 
dem aufspielen funktionieren. Diese enthielt aber KEINE .dtb Datei.

Mein selbst erzeugtes yocto liefert eben diese .dtb Datei. Wenn ich den 
Kernel (uImage) und das roots flashe, dann fängt mein embedded an zu 
booten - friert jedoch sofort ein.

Ich glaube verstanden zu haben, dass das  am fehlenden Device Tree 
liegen soll. Leider finde ich keinen Hinweis im Netz, der einem Dummie 
wie mir einfach erklären kann, was ich mit dem .dtb file mache?

Auf welche Partition schreibe ich das image? Muss es irgendwo angehangen 
werden?

Ich würde es gerne einfach erstmal zum laufen bringen - scheitere aber 
schon daran. Ich hoffe es kann mir jemand helfen.

Mit dem uboot kann ich folgende update funktion ausführen:
1
update <partition> [source] [extra-args...]
2
 Description: updates flash <partition> via <source>
3
 Arguments:
4
   - partition:    a partition name or one of the reserved names:
5
                   uboot|linux|android|rootfs|userfs|androidfs|splash|fdt
6
   - [source]:     tftp (default)|nfs|usb|mmc|hsmmc|sata|ram
7
   - [extra-args]: extra arguments depending on 'source'
8

9
      source=tftp|nfs -> [filename]
10
       - filename: file to transfer (required if using a partition name)
11

12
      source=usb|mmc|hsmmc|sata -> [device:part filesystem] [filename]
13
       - device:part: number of device and partition
14
       - filesystem: fat|vfat|ext2|ext3
15
       - filename: file to transfer
16

17
      source=ram -> <image_address> <image_size>
18
       - image_address: address of image in RAM
19
       - image_size: size of image in RAM

Vielen dank schonmal :)
Gast #4787789
Lesenswert?

Du kannst das dtb File einfach an das zImage anhängen:

Z.B. so:

function  mkdevtree-uboot-image()
{
    cp arch/arm/boot/zImage /tmp/zImage-with-dtb
    cat arch/arm/boot/dts/armada-370.dtb >> /tmp/zImage-with-dtb
    ./scripts/mkuboot.sh -A arm -O linux -T kernel -C none -a 0x00008000 
-e 0x00008000 -n 'Linux-mbx' -d /tmp/zImage-with-dtb /tmp/uImage
}

Ansonsten müsste es eigentlich genügen, das passende .dtb an den selben 
Ort wie den Kernel zu legen.
Gast #4787812
Lesenswert?

Ich habe beide images mit cat und cp zusammengefügt, aber beim booten 
friert das System nach wie vor ein.

Was du hier machst, ist mir nnicht so ganz klar? Was ist das für ein 
script und wo kommt dies her?
1
./scripts/mkuboot.sh -A arm -O linux -T kernel -C none -a 0x00008000 
2
-e 0x00008000 -n 'Linux-mbx' -d /tmp/zImage-with-dtb /tmp/uImage
Gast #4787998
Lesenswert?

Das mkuboot.sh Skript ist Bestandteil des Kerneltrees.

$cat mkuboot.sh
#!/bin/bash

#
# Build U-Boot image when `mkimage' tool is available.
#
....


Das zImage wird beim Kernel Build erzeugt ('make zImage').
uImage ist das vom uboot erwartete Format.

$ mkimage
Usage: mkimage -l image
          -l ==> list image header information
       mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name 
-d data_file[:data_file...] image
          -A ==> set architecture to 'arch'
          -O ==> set operating system to 'os'
          -T ==> set image type to 'type'
          -C ==> set compression type 'comp'
          -a ==> set load address to 'addr' (hex)
          -e ==> set entry point to 'ep' (hex)
          -n ==> set image name to 'name'
          -d ==> use image data from 'datafile'
          -x ==> set XIP (execute in place)
       mkimage [-D dtc_options] [-f fit-image.its|-F] fit-image
          -D => set all options for device tree compiler
          -f => input filename for FIT source
Signing / verified boot not supported (CONFIG_FIT_SIGNATURE undefined)
       mkimage -V ==> print version information and exit
Use -T to see a list of available image types
#4788071
Lesenswert?

Dein U-Boot sollte in der Lage sein, ein beliebiges DTB zusammen mit dem 
Kernel zu laden. Wo das DTB herkommt, ist dann egal, aber du musst 
dessen Adresse mit angeben.

Alternativ kannst das Devicetree-Binary auch an den Kernel kleben, aber 
das macht Veränderungen schwierig.
Gast #4788777
Lesenswert?

Also es hat jetzt folgendermaßen geklappt:

Ich habe eine Partition für device-tree erstellt und dort das dtb-image 
reingeschrieben. Nun wird anständig gebootet. Mit cp/cat konnte ich kein 
lauffähiges image zusammenbasteln?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren