微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Buildroot initramfs启动进入非交互式busybox shell

如何解决Buildroot initramfs启动进入非交互式busybox shell

我正在使用buildroot为我的IMX板构建一个initramfs映像。在板上,我运行定制的Linux 4.19.35 Linux内核(4.19.35-gexxxxxx)和定制的U-Boot引导程序。因此,不需要buildroot的这些。我的用例只是生成的rootfs.cpio(initramfs)映像。

我能够将上述initramfs加载到内存中并执行我的自定义init和post-init脚本。但是,我无法生成交互式外壳。在初始化脚本中到达命令/ bin / sh时,会看到一个shell提示,但似乎串行控制台没有注册任何键盘输入。请注意,所有其他Shell实用程序和命令都可以正常执行,但是仅当它们在脚本中运行时才可以执行。由于我的目标之一是获得最小的图像,因此我正在使用busyBox(1.32.0)。

当我运行相同的initramfs以及buildroot生成的内核映像时,这变得更加混乱。在这种情况下,我确实得到了一个交互式shell提示,并且能够像在常规终端中一样输入我的输入。

我怀疑这可能是由于内核不同而发生的。 buildroot内核映像为4.19.35,但我使用的内核为4.19.35-gexxxxx。但是,我不确定initramfs如何取决于内核版本字符串。

关于可能出问题的任何指示都将非常有帮助。

编辑1:以下是我的初始化代码

#!/bin/sh
/bin/mount -t devtmpfs devtmpfs /dev

export PATH=/sbin:/usr/sbin:/bin:/usr/bin

[ -d /dev ] || mkdir -m 0755 /dev
[ -d /root ] || mkdir -m 0700 /root
[ -d /sys ] || mkdir /sys
[ -d /proc ] || mkdir /proc
[ -d /tmp ] || mkdir /tmp
[ -d /run ] || mkdir /run

mkdir -p /dev/pts
mkdir -p /var/lock
/bin/mount -t sysfs -o nodev,noexec,nosuid sysfs /sys
/bin/mount -t proc -o nodev,nosuid proc /proc

/bin/mknod -m 666 /dev/ttyS0 c 4 64
/bin/mknod -m 666 /dev/ttyS0 c 4 64
/bin/mknod -m 622 /dev/console c 5 1
/bin/mknod -m 666 /dev/null  c 1 3
/bin/mknod -m 666 /dev/tty c 5 0
/bin/mknod -m 666 /dev/zero c 1 5
/bin/mknod -m 666 /dev/ttymxc3 c 5 1

/bin/sh # --------------------> Spawning a shell

解决方法

尝试使用 5v 串行适配器而不是 3.3v - 使用较低的电压,您仍然可以看到它发送的内容,但设备听不到您的适配器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。