Single device tree blob between linux and u-boot

Joel Stanley joel at jms.id.au
Wed Oct 26 16:22:42 AEDT 2016


Hey Rick,

On Fri, Oct 14, 2016 at 6:07 AM, Rick Altherr <raltherr at google.com> wrote:
> I've been working on signed kernel images which depends on building FIT
> images that include the kernel, initrd, and dtb.  The kernel_fitimage branch
> of my tree (https://github.com/kc8apf/openbmc) will build an unsigned FIT
> image by including the dtb specified in the machine config (usually from the
> kernel).  There are also provisions in there for u-boot being built in two
> stages so a control dtb that includes the public signing keys can be
> combined into the final u-boot binary.  From how that is structure, I
> suspect Maxim is right that there will be some differences between u-boot's
> dtb and linux's dtb.  That shouldn't be an issue as the u-boot dtb gets
> built into the u-boot image while the kernel dtb is loaded from the FIT
> image.

I finally got around to testing your FIT changes.

I had to build my own u-boot, as we don't have FIT support enabled. We
should make sure to add that to your patch series (in fact, we could
enable it now interdependently of the other changes).

I created an image like this:

$ dd if=/dev/zero of=flash-test bs=1M count=32
$ dd if=/home/joel/dev/u-boot/u-boot.bin of=flash-test conv=notrunc bs=1
$ dd if=/home/joel/dev/obmc/fit/fitImage-core-image-minimal-initramfs-palmetto.bin
of=flash-test conv=notrunc bs=1K seek=512

Here it is booting in Qemu:

$ qemu-system-arm -m 256M -M palmetto-bmc -nographic -nodefaults -net
nic -net user,hostfwd=:127.0.0.1:2222-:22,hostname=qemu -serial stdio
-drive file=~/dev/obmc/flash-test,format=raw,if=mtd


U-Boot 2016.11-rc2-02954-g9f82ceb7118d (Oct 26 2016 - 15:36:23 +1030)

SOC : AST2400-A0
RST : Power On
PLL :     24 MHz
CPU :    384 MHz
MEM :      0 MHz, EEC:Disable
VGA :    16 MiB
DRAM :   init by SOC
Model: Palmetto BMC
DRAM:  240 MiB
WARNING: Caches not enabled
Flash: 32 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   aspeednic#0
Error: aspeednic#0 address not set.

Hit any key to stop autoboot:  0
ast# bootm 0x80000
## Loading kernel from FIT Image at 00080000 ...
   Using 'conf at 1' configuration
   Trying 'kernel at 1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x00080124
     Data Size:    1511416 Bytes = 1.4 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x40008000
     Entry Point:  0x40008000
     Hash algo:    sha1
     Hash value:   1ab23fabb23234a21cd80651cd3c96a9b58a9e4c
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 00080000 ...
   Using 'conf at 1' configuration
   Trying 'ramdisk at 1' ramdisk subimage
     Description:  ramdisk image
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x001f62b8
     Data Size:    4724736 Bytes = 4.5 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   202c90e945a883ba8ff73fa4e197a17d6a9ce9f4
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 00080000 ...
   Using 'conf at 1' configuration
   Trying 'fdt at 1' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x001f1210
     Data Size:    20463 Bytes = 20 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   63054f0970e89a70a15d1faac53fe9544a83e2e5
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x1f1210
   Loading Kernel Image ... OK
   Loading Ramdisk to 4e700000, end 4eb81800 ... OK
   Loading Ramdisk to 4e27e000, end 4e6ff800 ... OK
   Loading Device Tree to 4e276000, end 4e27dfee ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Linux version 4.7.10-32ede9ab3deda73c484c4e2d372863bb73d0f7e0
(joel at ka3.ozlabs.ibm.com) (gcc version 5.3.0 (GCC) ) #1 Wed Oct 26
13:57:23 AEDT 2016
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00093177
CPU: VIVT data cache, VIVT instruction cache
Machine model: Palmetto BMC
Memory policy: Data cache writeback
SOC Rev: 02000303
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 60960
Kernel command line: console=ttyS4,115200n8 root=/dev/ram rw


Looks good!

Cheers,

Joel


More information about the openbmc mailing list