[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