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> 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