[U-Boot] Initramfs ignored by kernel

Koeller, Thomas Thomas.Koeller at baslerweb.com
Wed Mar 8 10:54:47 UTC 2017


Hi,

I am using u-boot 2016.09.01 to load a linux kernel on an embedded ARM (Zynq) board.

First, I built my kernel with the initramfs linked to it, setting CONFIG_INITRAMFS_SOURCE to my source files. The resulting kernel is then packaged as a legacy u-boot image (make uImage). This image can be booted using the 'bootm' command, passing only an FDT blob (no intramfs). Everything is fine so far.

Next, I modified my kernel configuration to use an initramfs built separately (CONFIG_BLK_DEV_INITRD=y, CONFIG_INITRAMFS_SOURCE=""). The initramfs is the same as above. I then used the mkimage program to create a FIT image containing the kernel (zImage format), initramfs (cpio.gz created using 'gen_init_cpio' from the kernel), and an FDT binary blob created by dtc. This is what the result looks like:

FIT description: Production Test Kernel/Initramfs/FDT
Created:         Wed Mar  8 09:39:47 2017
 Image 0 (kernel at 1)
  Description:  ProductionTest Kernel
  Created:      Wed Mar  8 09:39:47 2017
  Type:         Kernel Image
  Compression:  uncompressed
  Data Size:    1203704 Bytes = 1175.49 kB = 1.15 MB
  Architecture: ARM
  OS:           Linux
  Load Address: 0x00008000
  Entry Point:  0x00008000
  Hash algo:    crc32
  Hash value:   c45cf4b5
 Image 1 (ramdisk at 1)
  Description:  ramdisk
  Created:      Wed Mar  8 09:39:47 2017
  Type:         RAMDisk Image
  Compression:  uncompressed
  Data Size:    2835138 Bytes = 2768.69 kB = 2.70 MB
  Architecture: ARM
  OS:           Linux
  Load Address: 0x00000000
  Entry Point:  0x002b42c2
  Hash algo:    crc32
  Hash value:   bf16e40b
 Image 2 (fdt at 1)
  Description:  Flattened Device Tree blob
  Created:      Wed Mar  8 09:39:47 2017
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    15526 Bytes = 15.16 kB = 0.01 MB
  Architecture: ARM
  Hash algo:    crc32
  Hash value:   6122026f
 Default Configuration: 'conf at 1'
 Configuration 0 (conf at 1)
  Description:  Production Test
  Kernel:       kernel at 1
  Init Ramdisk: ramdisk at 1
  FDT:          fdt at 1

Booting this image via the 'bootm' command seems to work at first:

Devkit> bootm  ${kernel_addr}
## Loading kernel from FIT Image at 03000000 ...
   Using 'conf at 1' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel at 1' kernel subimage
     Description:  ProductionTest Kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x030000e0
     Data Size:    1203704 Bytes = 1.1 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x00008000
     Entry Point:  0x00008000
     Hash algo:    crc32
     Hash value:   f057a702
   Verifying Hash Integrity ... crc32+ OK
## Loading ramdisk from FIT Image at 03000000 ...
   Using 'conf at 1' configuration
   Trying 'ramdisk at 1' ramdisk subimage
     Description:  ramdisk
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x03125fac
     Data Size:    2835161 Bytes = 2.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x00000000
     Entry Point:  unavailable
     Hash algo:    crc32
     Hash value:   2e7965c4
   Verifying Hash Integrity ... crc32+ OK
## Loading fdt from FIT Image at 03000000 ...
   Using 'conf at 1' configuration
   Trying 'fdt at 1' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x033da35c
     Data Size:    15526 Bytes = 15.2 KiB
     Architecture: ARM
     Hash algo:    crc32
     Hash value:   6122026f
   Verifying Hash Integrity ... crc32+ OK
   Booting using the fdt blob at 0x33da35c
   Loading Kernel Image ... OK
   Loading Ramdisk to 1fd4b000, end 1ffff2d9 ... OK
   Loading Device Tree to 1fd44000, end 1fd4aca5 ... OK

Starting kernel ...

However, the kernel apparently fails to access the initramfs image:

Failed to execute /init (error -2)
Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.

I verified that /init is actually present in the initramfs image and has permission 755. Can anybody help with this problem?

Thomas



Thomas Koeller
Senior Software Developer



Basler AG
An der Strusbek 60-62
22926 Ahrensburg
Germany

Tel. +49 4102 463 390
Fax +49 4102 463 46 390

Thomas.Koeller at baslerweb.com
www.baslerweb.com



BASLER´S COMPONENTS ENHANCE YOUR VISION
baslerweb.com/vision-components

Management board: Dr.-Ing. Dietmar Ley (CEO) · John P. Jennings · Arndt Bake · Hardy Mehl
Chairman of the supervisory board: Norbert Basler
Basler AG · Amtsgericht Lübeck HRB 4090 · Ust-IdNr.: DE 135 098 121 · Steuer-Nr.: 30 292 04497 · WEEE-Reg.-Nr. DE 83888045


More information about the U-Boot mailing list