AnsweredAssumed Answered

Kernel Failed to start with verified boot

Question asked by Nidheesh Kumar K on Aug 23, 2019
Latest reply on Sep 5, 2019 by jimmychan

Hi All,

 

I followed the steps from doc/uImage.FIT/beaglebone_vboot.txt · master · U-Boot / U-Boot · GitLab 

to configure verified boot feature into u-boot.

After flashing the verified u-boot , the kernel is failing to start. Signature verification is passed but kernel fails with "undefined instruction" error. Below are the logs :

u-boot version : 2016.01-r0

board - Congatec Q7 module

 

## Loading kernel from FIT Image at 18000000 ...
   Using 'conf@1' configuration
   Verifying Hash Integrity ... sha1,rsa2048:dev+ OK
   Trying 'kernel@1' kernel subimage
     Description:  congatec-linux
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x180000c0
     Data Size:    7377928 Bytes = 7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x10008000
     Entry Point:  0x10008000
     Hash algo:    sha1
     Hash value:   fcf83db0c175bc00ec3dfb9f7f5b50a27e894cc2
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 18000000 ...
   Using 'conf@1' configuration
   Trying 'fdt@1' fdt subimage
     Description:  congatec:imx6dl-qmx6
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x187095b8
     Data Size:    45195 Bytes = 44.1 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   57210d9ad5b3c7c5c53b65fe375c72b28b1300ef
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x187095b8
   Loading Kernel Image ... OK
   Loading Device Tree to 1fff1000, end 1ffff08a ... OK
switch to ldo_bypass mode!

 

Starting kernel ...

 

undefined instruction
pc : [<10008008>]          lr : [<4ff4dbe5>]
reloc pc : [<d78bc008>]    lr : [<17801be5>]
sp : 4f53f6e0  ip : ffffffff     fp : 4ff4dd21
r10: 00000000  r9 : 4f54beb8     r8 : 4f550484
r7 : 00000000  r6 : 10008000     r5 : 4ffa475c  r4 : 00000000
r3 : 0000b08b  r2 : 1fff1000     r1 : 0000101a  r0 : 4f54bfb0
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...

resetting ...

 

Looks like the it is not able to point to the correct kernel entry point. I tried with different entry address (0x80008000) by editing the entry address in "sign.its" file but no luck.

 

Can someone help me if you have faced this issue before.

 

Update :

============================

Noticed that the register r0 as per https://www.kernel.org/doc/Documentation/arm/Booting 

is not 0. r1 and r2 are good.

- CPU register settings   r0 = 0,   r1 = machine type number discovered in (3) above.   r2 = physical address of tagged list in system RAM, or        physical address of device tree block (dtb) in system RAM

r2 : 1fff1000     r1 : 0000101a  r0 : 4f54bfb0

Outcomes