Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux /bin/sh:can';t访问tty;作业控制已关闭_Linux_Embedded Linux_Qemu - Fatal编程技术网

Linux /bin/sh:can';t访问tty;作业控制已关闭

Linux /bin/sh:can';t访问tty;作业控制已关闭,linux,embedded-linux,qemu,Linux,Embedded Linux,Qemu,我一直在遵循Chris Simmonds的《掌握嵌入式linux编程》一书中的命令。我创建了工具链、内核zImage和busybox文件系统。当我将这些结合起来在QEMU上运行时,它应该会显示一个根shell提示符 当我运行该命令时,我得到以下信息 /bin/sh: can't access tty; job control turned off input: ImExPS/2 Generic Explorer Mouse as /devices/platform/amba/amba:fpga

我一直在遵循Chris Simmonds的《掌握嵌入式linux编程》一书中的命令。我创建了工具链、内核zImage和busybox文件系统。当我将这些结合起来在QEMU上运行时,它应该会显示一个根shell提示符

当我运行该命令时,我得到以下信息

/bin/sh: can't access tty; job control turned off 
input: ImExPS/2 Generic Explorer Mouse as /devices/platform/amba/amba:fpga/10007000.kmi/serio1/input/input2 
当我按enter键时,我能够看到根shell提示符,并且能够执行简单的shell命令

但是,当我按下exit时,我得到了以下错误

Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000

CPU: 0 PID: 1 Comm: sh Not tainted 4.9.13 #1
Hardware name: ARM-Versatile (Device Tree Support)
[<c001b5a4>] (unwind_backtrace) from [<c0018860>] (show_stack+0x10/0x14)
[<c0018860>] (show_stack) from [<c00737f4>] (panic+0xb8/0x230)
[<c00737f4>] (panic) from [<c0024e24>] (do_exit+0x8e8/0x938)
[<c0024e24>] (do_exit) from [<c0025cf8>] (do_group_exit+0x38/0xb4)
[<c0025cf8>] (do_group_exit) from [<c0025d84>] (__wake_up_parent+0x0/0x18)
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000
(您没有说明QEMU命令行是什么。)

如果您告诉内核直接将/bin/sh作为其进程1运行(例如内核命令行上的“init=/bin/sh”),那么这些错误消息通常是您应该看到的。首先,shell抱怨它没有tty,但它可以在禁用某些功能的情况下继续运行。然后,当您最终告诉shell退出时,因为shell本身是进程1,内核会抱怨。(通常进程1应该是一个“init”程序,它永远运行并处理启动系统中其他进程的问题。如果“init”死了,内核就无能为力了。)


如果您打算将/bin/sh作为进程1运行,那么这一切都是正常的。如果您不想这样做,那么您的根文件系统或命令行出现问题,这意味着它没有在来宾系统中正确启动/sbin/init,您应该看看原因。

改用Buildroot发行版。你所做的是很难达到同样的效果,而且,正如你所了解的那样,很容易出错。在上面的例子中,您有两个问题,一个是禁用了
tty
,另一个是您的busybox包含不正确的
/etc/inittab
。等等,等等……我正在做一个项目,要求从头开始,不使用任何发行版。是的,我正在尝试运行/bin/sh本身。但是,当我删除-nographic参数时,根shell不会显示在qemu中。qemu只显示一个空白屏幕。如何检查guest中为什么没有启动/sbin/init。我对这一点还不太熟悉,而且非常简单。您需要告诉来宾内核将其控制台发送到哪里,并且还需要告诉QEMU将该设备发送到您想要读取它的任何地方。“console=ttyam0”表示“将控制台发送到串行端口。”-nographic“告诉QEMU(除其他外)将串行端口发送到您的主机终端窗口。根据您在来宾内核中内置的设备,您可以告诉它将控制台输出发送到其他地方,QEMU有许多命令行选项,用于指示各种设备输出的方向。但是您需要使这两个选项匹配,否则您将根本看不到输出。对不起,这是为什么通道2是否需要匹配?如果我添加“terminal=ttS0“和remove-nographic,我可以在QEMU窗口中看到引导命令,但看不到根shell提示符。如果您有内核引导日志,但没有根shell提示符,则可能需要修复init的配置文件,以便在正确的终端上启动tty。在sysvinit和busybox init中,我认为是/etc/inittab。
QEMU_AUDIO_DRV=none \qemu-system-arm 
-m 256M -nographic 
-M versatilepb 
-kernel ~/linux-4.9.13/arch/arm/boot/zImage 
\-append "console=ttyAMA0,115200 rdinit=/bin/sh" 
-dtb ~/linux-4.9.13/arch/arm/boot/dts/versatile-pb.dtb 
-initrd ~/busybox/initramfs.cpio.gz