作为linux内核的开发环境,我使用qemu设置与here类似的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
发布于 2016-04-10 21:11:38
来自Linux From Scratch Chapter 6.8. Populating /dev
6.8.1。创建初始设备节点
当内核引导系统时,它要求存在一些设备节点,特别是控制台和空设备。通过运行以下命令来创建这些文件:
mknod -m 600 /开发/控制台c 5 1 mknod -m 666 /开发/空c 1 3
然后,您应该继续执行"6.8.2.挂载tmpfs和填充/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}
https://stackoverflow.com/questions/36529881
复制相似问题