我正在使用Buildroot为我的IMX Board构建initramfs映像。在板上,我运行了一个自定义的Linux 4.19.35 Linux内核(4.19.35-gexxxxxx(和一个自定义U-Boot引导程序。因此,不需要Buildroot提供这些。我的用例只是构建的rootfs.cpio(initramfs(映像。
我能够将上面的initramfs加载到内存中,并执行我的自定义init和post-init脚本。但是,我无法生成交互式shell。在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,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
尝试使用5v串行适配器而不是3.3v-在较低的电压下,您仍然可以看到它发送的内容,但设备听不到适配器的声音。