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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

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@xxxxxxxxxx>
Sent: Friday, August 12, 2022 5:32 PM
To: kernelnewbies@xxxxxxxxxxxxxxxxx
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

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux