Init process not found when booting with ramdisk as rootfs

Mihai Daniel
Hi,
I'm trying to setup a ramdisk for a setup I have with AT91SAM9261 and
2.6.30 kernel.
I know you would say why don't I use initramfs? I will use also that one,
as of now I would like to check if I can boot with a ramdisk as rootfs.

I have already a root fs running fine on this system in jffs2 format.
I used below tutorial:

http://www.ibm.com/developerworks/library/l-initrd/

So I created the ramdisk directly on the embedded target, with 4MB size.
I used "dd" and "mkefs" and the ramdisk image works fine if I mount it as
loop when rootfs is my jffs2. 
I can browse mount_point and do stuff inside.
The content was created according to the section "Manually building initial
RAM disk" in the above link.



In /dev I placed null and console, in /bin I copied busybox and created the
links.
I set the execute attribute to init script as well, which works fine when I
run it here (as loop device with jffs2 as rootfs)

In my kernel config I enabled ramdisk support as follows:

    CONFIG_BLK_DEV_INITRD=y
    CONFIG_RD_GZIP=y
    
    CONFIG_BLK_DEV_RAM=y
    CONFIG_BLK_DEV_RAM_COUNT=16
    CONFIG_BLK_DEV_RAM_SIZE=4096

Using tftp I download the ramdisk image to 0x21100000.
At 0x20008000 I have the kernel uncompressed and at 0x22000000 the zImage
copied.

However, I'm not able to boot successfully the system as it hangs when
checking init process.
As I mentioned, I checked several times that my init can be executed, 

I also used in the bootargs init=/bin/busybox or other scripts/binaries to
check if any can be used as init.

Command line I use now:

> bootargs=64M console=ttyS0,115200 root=/dev/ram0 rw
> initrd=0x21100000,4194304 init=/init

For some I set ownership to "nobody" just to check if it makes any
difference.
As it can be seen in the log output the ramdisk is mounted, but init fails.
It gives a warning to check the ext2 image, which I did before copying it
and I have no error reported.

The tftp server is on Windows7. I though I might have some incompatibility
if I copy the ramdisk image from linux to Windows then do tftp from Windows
server.
So I copied the image again from Windows to linux, mounted it and checked
if the FS reports any error and scripts can be executed - everything looks
normal.

So I do have all files in place, attributes set, ramdisk is reported as
being mounted ok as rootfs, but init cannot be found.





     Uncompressing
Linux...........................................................................
..............................
done, booting the kernel.
    Linux version 2.6.30-olimex (mishu@KubuntuVM) (gcc version 4.3.3
(Sourcery G++ Lite 2009q1-203) ) #1 Mon Dec 29 13:53:54 CET 2014
    CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
    CPU: VIVT data cache, VIVT instruction cache
    Machine: Olimex SAM9-L9261
    Ignoring unrecognised tag 0x54410008
    Memory policy: ECC disabled, Data cache writeback
    Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz
    Built 1 zonelists in Zone order, mobility grouping on.  Total pages:
16256
    Kernel command line: 64M console=ttyS0,115200 root=/dev/ram0 rw
initrd=0x21100000,4194304 init=/init
    NR_IRQS:192
    AT91: 96 gpio irqs in 3 banks
    PID hash table entries: 256 (order: 8, 1024 bytes)
    Console: colour dummy device 80x30
    console [ttyS0] enabled
    Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
    Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
    Memory: 64MB = 64MB total
    Memory: 57384KB available (2924K code, 246K data, 132K init, 0K
highmem)
    Calibrating delay loop... 99.12 BogoMIPS (lpj=495616)
    Mount-cache hash table entries: 512
    CPU: Testing write buffer coherency: ok
    net_namespace: 716 bytes
    NET: Registered protocol family 16
    AT91: Power Management
    AT91: Starting after user reset
    bio: create slab <bio-0> at 0
    SCSI subsystem initialized
    usbcore: registered new interface driver usbfs
    usbcore: registered new interface driver hub
    usbcore: registered new device driver usb
    NET: Registered protocol family 2
    IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
    TCP established hash table entries: 2048 (order: 2, 16384 bytes)
    TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
    TCP: Hash tables configured (established 2048 bind 2048)
    TCP reno registered
    NET: Registered protocol family 1
    Trying to unpack rootfs image as initramfs...
    rootfs image is not initramfs (junk in compressed archive); looks like
an initrd
    Freeing initrd memory: 4096K
    NetWinder Floating Point Emulator V0.97 (double precision)
    JFFS2 version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
    msgmni has been set to 120
    io scheduler noop registered
    io scheduler anticipatory registered (default)
    atmel_lcdfb atmel_lcdfb.0: backlight control is not available
    atmel_lcdfb atmel_lcdfb.0: 225KiB frame buffer at 23140000 (mapped at
ffc00000)
    Console: switching to colour frame buffer device 40x30
    atmel_lcdfb atmel_lcdfb.0: fb0: Atmel LCDC at 0x00600000 (mapped at
c4866000), irq 21
    atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
    atmel_usart.1: ttyS1 at MMIO 0xfffb0000 (irq = 6) is a ATMEL_SERIAL
    brd: module loaded
    loop: module loaded
    ssc ssc.1: Atmel SSC device at 0xc4878000 (irq 15)
    Driver 'sd' needs updating - please use bus_type methods
    dm9000 Ethernet Driver, V1.31
    eth0 (dm9000): not using net_device_ops yet
    eth0: dm9000e at c486a000,c486e044 IRQ 107 MAC: 3a:1f:34:08:54:64
(chip)
    NAND device: Manufacturer ID: 0xec, Chip ID: 0xdc (Samsung NAND 512MiB
3,3V 8-bit)
    Scanning device for bad blocks
    Bad eraseblock 1478 at 0x00000b8c0000
    Creating 2 MTD partitions on "atmel_nand":
    0x000000000000-0x000000040000 : "Partition 1"
    0x000000040000-0x000020000000 : "Partition 2"
    atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
    ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
    at91_ohci at91_ohci: AT91 OHCI
    at91_ohci at91_ohci: new USB bus registered, assigned bus number 1
    at91_ohci at91_ohci: irq 20, io mem 0x00500000
    usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
    usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
    usb usb1: Product: AT91 OHCI
    usb usb1: Manufacturer: Linux 2.6.30-olimex ohci_hcd
    usb usb1: SerialNumber: at91
    usb usb1: configuration #1 chosen from 1 choice
    hub 1-0:1.0: USB hub found
    hub 1-0:1.0: 2 ports detected
    Initializing USB Mass Storage driver...
    usbcore: registered new interface driver usb-storage
    USB Mass Storage support registered.
    udc: at91_udc version 3 May 2006
    g_serial gadget: Gadget Serial v2.4
    g_serial gadget: g_serial ready
    mice: PS/2 mouse device common for all mice
    input: gpio-keys as /class/input/input0
    ads7846 spi0.2: touchscreen, irq 29
    input: ADS784x Touchscreen as /class/input/input1
    rtc-at91sam9 at91_rtt.0: rtc core: registered at91_rtt as rtc0
    IRQ 1/rtc0: IRQF_DISABLED is not guaranteed on shared IRQs
    rtc-at91sam9 at91_rtt.0: rtc0: SET TIME!
    i2c /dev entries driver
    i2c-gpio: probe of i2c-gpio failed with error -16
    Registered led device: led1
    Registered led device: led2
    Registered led device: led3
    Advanced Linux Sound Architecture Driver Version 1.0.20.
    at73c213 spi0.3: at73c213: supported bitrate is 48500 (64 divider)
    usb 1-1: new full speed USB device using at91_ohci and address 2
    usb 1-1: New USB device found, idVendor=0457, idProduct=0151
    usb 1-1: New USB device strings: Mfr=0, Product=2, SerialNumber=3
    usb 1-1: Product: USB Mass Storage Device
    usb 1-1: SerialNumber: 8d54bd8186b42c
    usb 1-1: configuration #1 chosen from 1 choice
    scsi0 : SCSI emulation for USB Mass Storage devices
    ALSA device list:
      #0: SAM9-L9261 external DAC on irq 15
    TCP cubic registered
    NET: Registered protocol family 17
    RPC: Registered udp transport module.
    RPC: Registered tcp transport module.
    rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock
    RAMDISK: ext2 filesystem found at block 0
    RAMDISK: Loading 4096KiB [1 disk] into ram disk... done.
    EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
    VFS: Mounted root (ext2 filesystem) on device 1:0.
    Freeing init memory: 132K
    Failed to execute /init.  Attempting defaults...
    Kernel panic - not syncing: No init found.  Try passing init= option to
kernel.
    [<c002f414>] (unwind_backtrace+0x0/0xdc) from [<c025bd34>]
(panic+0x40/0x110)
    [<c025bd34>] (panic+0x40/0x110) from [<c0029500>] (init_post+0xd0/0xf8)
    [<c0029500>] (init_post+0xd0/0xf8) from [<c00085a0>]
(kernel_init+0xbc/0xe4)
    [<c00085a0>] (kernel_init+0xbc/0xe4) from [<c0041998>]
(do_exit+0x0/0x5ac)
    [<c0041998>] (do_exit+0x0/0x5ac) from [<00000001>] (0x1)


    


I plan to rebuild busybox and try again, but as my current ramdisk image
works when I mount it as loop I don't have too much confidence it will
change something.
I'm out of ideas. I've been trying the whole day to get this working.

Help is much appreciated.

Thanks.