busybox shell doesn't come up or get stuck.. where should I look or how should I debug it?

Chan Kim ckim at etri.re.kr
Thu Aug 18 01:19:13 EDT 2022


Hello, all,

 

In the initramfs.cpio.gz file from the busybox, when I replace the /init
script to an executable binary called 'init', (which prints Hello!
Repeatedly), 

The output from the board looks like this.  

(...)

### point 106

### point 106-1

Run /init as init process

### point 106-2, ret = -2

Failed to execute /init (error -2)

### point 107

### point 107-1

Run /init as init process

### point 107-2, ret = -2

Kernel panic - not syncing: Requested init /init failed (error -2).

CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.0-rc5 #197

Hardware name: ETRI ab21m (DT)

Call trace:

dump_backtrace+0x0/0x190

show_stack+0x14/0x30

dump_stack+0xcc/0x104

panic+0x16c/0x328

kernel_init+0x178/0x264

ret_from_fork+0x10/0x18

Kernel Offset: disabled

CPU features: 0x0000007,78002c18

Memory Limit: none

---[ end Kernel panic - not syncing: Requested init /init failed (error -2).
]---

 

The related source code (init/main.c) looks like this (trying it first from
the ramdisk.  'init=/init' was given from the bootargs in device tree)

 

printk("### point 106\n");

    if (ramdisk_execute_command) {

        printk("### point 106-1\n");

        ret = run_init_process(ramdisk_execute_command);

        printk("### point 106-2, ret = %d\n", ret);

        if (!ret)

            return 0;

        pr_err("Failed to execute %s (error %d)\n",

               ramdisk_execute_command, ret);

    }

 

    /*

     * We try each of these until one succeeds.

     *

     * The Bourne shell can be used instead of init if we are

     * trying to recover a really broken machine.

     */

    printk("### point 107\n");

    if (execute_command) {

        printk("### point 107-1\n");

        ret = run_init_process(execute_command);

        printk("### point 107-2, ret = %d\n", ret);

        if (!ret)

            return 0;

        panic("Requested init %s failed (error %d).",

              execute_command, ret);

    }

 

I compiled the init program by the command "aarch64-none-linux-gcc -static
-o init test.c".

When 'init' was a script, some lines of it was processed ok, but when I
replace 'init' to a binary program, it just failed with -2.

I find error code 2 is 'No such file or directory' which is strange because
my 'init' program was under / when I made the initramfs.cpio.gz.

Can anyone give me any advice?

 

Thank you!

Chan Kim

 

From: Chan Kim <ckim at etri.re.kr> 
Sent: Friday, August 12, 2022 5:32 PM
To: kernelnewbies at kernelnewbies.org
Subject: busybox shell doesn't come up or get stuck.. where should I look or
how should I debug it?

 

Hi all,

I'm trying to boot linux with minimal config on our FPGA board which is
under development.

After months of trying (but I tried this intermittently) I think I'm about
to see the shell prompt.

(there was a bug in interconnect driver that I found yesterday, this caused
a long delay)

Anyway, when I run linux kernel on a qemu machine, the boot process ends
like this at the shell prompt.

(The echo '### INIT SCRIPT ###' was put in /init script which is in the
initramfs)

    

    Run /init as init process

    ### INIT SCRIPT ###

    mount: mounting none on /tmp failed: Invalid argument

    

    This boot took 2.12 seconds

    

    /bin/sh: can't access tty; job control turned off

    / # 

    / #

Now, when I run it on our FPGA board using u-boot, it ends like this.

    

    Run /init as init process

    ### INIT SCRIPT ###

    mount: mounting none on /tmp failed: Invalid argument

    

    This boot took 0.00 seconds

    

    /bin/sh: can't acce

    

So it seems this init_kernel thread executes /init and /init excutes /bin/sh
at the end.

this is the /init script.

#!/bin/sh

echo "### INIT SCRIPT ###"

mkdir /proc /sys /tmp

mount -t proc none /proc

mount -t sysfs none /sys

mount -t tmpfs none /tmp

echo -e "\nThis boot took $(cut -d' ' -f1 /proc/uptime) seconds\n"

#ifconfig eth0 10.0.2.15 netmask 255.255.255.0 up

#route add default gw 10.0.2.2

exec /bin/sh

Somehow the busybox applet /bin/sh is stuck somewhere.

Can anybody tell me where I should look? Or how to debug this?

Thanks in advance!

Chan Kim

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20220818/a68c2ddc/attachment-0001.html>


More information about the Kernelnewbies mailing list