如果我做:
git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
make BR2_JLEVEL=2
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user
我必须先键入root
QEMU才能使用该外壳。
如何配置buildroot跳过它并直接登录?
在Ubuntu 16.04上测试。
::respawn:-/bin/sh
使用BR2_ROOTFS_OVERLAY
,将来宾修改/etc/inittab
为包含:
::respawn:-/bin/sh
而不是默认的表格行:
console::respawn:/sbin/getty -L console 0 vt100
您可以在构建后复制默认值inittab
,output/target/etc/inittab
以修改上面的内容。
我在研究examples/inittab
Busybox 1_28_3时发现了这一点,并找到了它,并对其进行了尝试,并且它起作用了,所以这是我到目前为止找到的最好的解决方案。
不要忘了前划线-
,否则Ctrl + C之类的作业控制操作将无法正常工作,如下所述。
-
BusyBox的init神奇地解析了前导破折号:https://github.com/mirror/busybox/blob/1_28_3/init/init.c#L439并为随后的命令设置了TTY。
BusyBox还将或附加-
到开头或arg[0]
,后者/bin/sh
解释为表示登录shell,这使它可以获取一些初始化文件,例如/etc/profile
。另请参阅:https : //stackoverflow.com/a/42291142/895245
以下是等效的,因为console
它是默认值:
console::respawn:-/bin/sh
默认情况下,要以其他用户身份登录,可以使用:
::respawn:-/bin/login -f user0
这是一个示例设置。
先前的答案: getty -l
将近两年后,我找到了它!:-)
使用BR2_ROOTFS_OVERLAY
,覆盖/创建以下文件:
/ etc / inittab:从https://github.com/buildroot/buildroot/blob/2018.02/package/busybox/inittab开始,并将控制台行编辑为:
console::respawn:/sbin/getty -n -L -l /loginroot.sh console 0 vt100
/loginroot.sh:
#!/bin/sh
exec /bin/login root
/bin/login
是默认可执行文件(如果-l
未提供)。我们创建了一个可执行文件/bin/login
并使用root
指定用户进行调用的操作。
这使得init
尝试默认情况下以root用户身份登录,然后由于默认密码为空(BR2_TARGET_GENERIC_ROOT_PASSWD
),因此它将自动登录。
该技术基本上重新实现了-a <user>
Ubuntu 14.04中存在的选项getty
,而BusyBox的实现则没有该选项。
然后,要以其他用户身份登录,只需运行:
/bin/login
这是一个示例设置。
先前的先前答案: console::respawn:/bin/sh
我已在邮件列表中询问,托马斯·佩塔佐尼(Thomas Petazzoni)回答说:
/etc/inittab
应包含:
console::respawn:/bin/sh
代替:
console::respawn:/sbin/getty -n -L console 0 vt100 # GENERIC_SERIAL
使用qemu_x86_defconfig
,由于导致inittab
Busybox的init
系统正在使用BR2_INIT_BUSYBOX=y
。
但是,此方法确实有一个缺点:登录后,消息显示:
/bin/sh can't access tty; job control turned off
并且如广告所示,类似的东西Ctrl+C
将无效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句