簡體   English   中英

QEMU:/ bin / sh:無法訪問tty; 工作控制關閉

[英]QEMU: /bin/sh: can't access tty; job control turned off

作為linux內核的開發環境,我使用qemu設置initramfs ,類似於此處顯示的內容,幾乎沒有其他可執行文件。 基本上,它使用busybox創建最小的環境並使用cpio將其打包。 init內容如下所示。

$ cat init
mount -t proc none /proc
mount -t sysfs none /sys

echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
exec /bin/sh

使用以下命令啟動VM:

qemu-system-x86_64 -kernel bzImage -initrd initramfs -append "console=ttyS0" -nographic

它拋出以下錯誤:

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

雖然,在大多數情況下系統功能正常。 但是,我無法創建后台進程:

$ prog &
/bin/sh: can't open '/dev/null'
$ fg
/bin/sh: fg: job (null) not created under job control

所有問題的根源似乎都無法訪問tty 我怎樣才能解決這個問題?

編輯:除了接受的答案,因為可以使用busybox的cttyhack

$cat init
#!/bin/sh

mount -t proc none /proc
mount -t sysfs none /sys
mknod -m 666 /dev/ttyS0 c 4 64

echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
setsid  cttyhack sh
exec /bin/sh

來自Linux From Scratch第6.8章。 填充/開發

6.8.1。 創建初始設備節點

當內核引導系統時,它需要存在一些設備節點,特別是控制台和空設備。 通過運行以下命令來創建它們:

 mknod -m 600 /dev/console c 5 1 mknod -m 666 /dev/null c 1 3 

然后,您應該繼續執行“6.8.2。掛載tmpfs和Populating / dev”中的步驟。 注意<--下面,我建議你閱讀整個免費的 LFS

mount -n -t tmpfs none /dev
mknod -m 622 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3
mknod -m 666 /dev/zero c 1 5
mknod -m 666 /dev/ptmx c 5 2
mknod -m 666 /dev/tty c 5 0 # <--
mknod -m 444 /dev/random c 1 8
mknod -m 444 /dev/urandom c 1 9
chown root:tty /dev/{console,ptmx,tty}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM