All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Chan Kim" <ckim@etri.re.kr>
To: <kernelnewbies@kernelnewbies.org>
Subject: RE: busybox shell doesn't come up or get stuck.. where should I look or how should I debug it?
Date: Thu, 18 Aug 2022 14:19:13 +0900	[thread overview]
Message-ID: <060e01d8b2c2$0e319680$2a94c380$@etri.re.kr> (raw)
In-Reply-To: <03db01d8ae26$07e35980$17aa0c80$@etri.re.kr>


[-- Attachment #1.1: Type: text/plain, Size: 4162 bytes --]

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@etri.re.kr> 
Sent: Friday, August 12, 2022 5:32 PM
To: kernelnewbies@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


[-- Attachment #1.2: Type: text/html, Size: 29722 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

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

  reply	other threads:[~2022-08-18  5:38 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-12  8:32 busybox shell doesn't come up or get stuck.. where should I look or how should I debug it? Chan Kim
2022-08-18  5:19 ` Chan Kim [this message]
2022-08-18  6:02   ` Chan Kim
2022-08-19 11:50     ` Chan Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='060e01d8b2c2$0e319680$2a94c380$@etri.re.kr' \
    --to=ckim@etri.re.kr \
    --cc=kernelnewbies@kernelnewbies.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.