Cir*_*郝海东 8 busybox buildroot busybox-init
如果我做:
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
Run Code Online (Sandbox Code Playgroud)
我必须先输入rootQEMU,然后才能使用 shell。
如何配置 buildroot 跳过它并直接登录?
在 Ubuntu 16.04 上测试。
Cir*_*郝海东 12
::respawn:-/bin/sh
使用BR2_ROOTFS_OVERLAY,修改来宾/etc/inittab以包含:
::respawn:-/bin/sh
Run Code Online (Sandbox Code Playgroud)
而不是默认的表单行:
console::respawn:/sbin/getty -L console 0 vt100
Run Code Online (Sandbox Code Playgroud)
您可以复制默认inittab从output/target/etc/inittab生成后,从它修改上述行。
我在研究examples/inittabBusybox 1_28_3 时发现了这个,发现了这个,尝试了一下,它奏效了,所以这是我迄今为止找到的最好的解决方案。
不要忘记前导破折号-,或者像 Ctrl + C 这样的作业控制操作不起作用,如下所述。
-BusyBox 的 init 神奇地解析了前导破折号:https : //github.com/mirror/busybox/blob/1_28_3/init/init.c#L439并为后面的命令设置 TTY。
BusyBox 还将 附加-到开头 or arg[0],它/bin/sh解释为指示登录 shell,这使得它可以获取一些 init 文件,例如/etc/profile. 另见:https : //stackoverflow.com/a/42291142/895245
以下是等效的,因为console是默认值:
console::respawn:-/bin/sh
Run Code Online (Sandbox Code Playgroud)
要默认以其他用户身份登录,您可以改用:
::respawn:-/bin/login -f user0
Run Code Online (Sandbox Code Playgroud)
这是一个示例设置。
上一个答案: 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
Run Code Online (Sandbox Code Playgroud)
/loginroot.sh:
#!/bin/sh
exec /bin/login root
Run Code Online (Sandbox Code Playgroud)
/bin/login如果-l未给出,则为默认可执行文件。我们做了什么来创建一个可执行文件,该可执行文件/bin/login与root已指定的用户一起调用。
这使得init默认尝试以 root 用户身份登录,然后由于默认密码为空 ( BR2_TARGET_GENERIC_ROOT_PASSWD),它会自动登录。
这种技术基本上重新实现了-a <user>Ubuntu 14.04 中存在的选项getty,而 BusyBox 的实现没有。
然后,要以其他用户身份登录,只需运行:
/bin/login
Run Code Online (Sandbox Code Playgroud)
这是一个示例设置。
以前的回答: console::respawn:/bin/sh
我在邮件列表上询问过,Thomas Petazzoni 回答说:
/etc/inittab
Run Code Online (Sandbox Code Playgroud)
应包含:
console::respawn:/bin/sh
Run Code Online (Sandbox Code Playgroud)
代替:
console::respawn:/sbin/getty -n -L console 0 vt100 # GENERIC_SERIAL
Run Code Online (Sandbox Code Playgroud)
由于qemu_x86_defconfig,inittabBusybox 的init系统正在使用BR2_INIT_BUSYBOX=y。
然而,这种方法确实有一个缺点:登录后,消息显示:
/bin/sh can't access tty; job control turned off
Run Code Online (Sandbox Code Playgroud)
正如宣传的那样,诸如此类的事情Ctrl+C将无效。