0

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

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

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

我怀疑这可能是由于内核不同而发生的。buildroot 内核映像是 4.19.35,但我使用的内核是 4.19.35-gexxxx。但是,我不确定 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,noexec,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
4

1 回答 1

0

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

于 2021-02-19T05:33:35.217 回答