问题标签 [initramfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
574 浏览

linux-kernel - 有没有办法将 kexec 功能添加到busybox initrd?

我的板上有 3 MB 的 SPI 闪存,我可以将 bzImage、busybox initrd 和 coreboot ROM 打包到这个 SPI 闪存中。我还能够启动到 shell,全部使用 ROM kernel-as-bootloader。

我在 USB 设备上有更大的内核。我还能够检测到 USB 并安装它。但问题是busybox 似乎没有kexec 实用程序。我不能使用任何其他 initrd 包,因为由于内存限制,我的 cpio(未压缩)大小不应超过 1.4 MB。U-root具有 kexec 支持,但最小图像大小很容易达到 3MB,或者至少,我找不到构建小于该大小的方法。

因此,有没有办法将 kexec 支持添加到busybox(编译静态二进制文件并复制到 initrd?)或任何其他可以满足 1.4MB 大小需求的 initrd 包?

编辑

这篇文章表明busybox中可能有kexec支持,但我找不到它的任何痕迹。事实上,将 kexec-tools 添加到busybox 的请求是在十多年前完成的。但是当我在busybox中执行grep时,我没有看到它的痕迹。

0 投票
2 回答
966 浏览

redhat - 如何在 RHEL7 上重新打包 initramfs 映像?

在 RHEL 7 上,initramfs 图像文件格式发生了变化。要解压缩图像,需要使用 skipcpio。例如

我成功地使用上面的命令解压了图像,但我无法将它打包回来。旧方法(就像在 RHEL 6 上一样)不起作用(

是否可以将图像打包回 RHEL7 上?

谢谢

0 投票
2 回答
595 浏览

sh - 我正在尝试创建一个基于 tpm2 的自动解锁 sh 脚本,但脚本失败,找不到文件

我正在尝试使用 tpm2-tools 和Tevora Secure boot tpm2的说明创建一个基于 TPM 的解锁脚本。我已经设置了密钥,加载了它cryptsetup luksAddKey secret.bin,然后使用它进行了测试tpm2_unlock -c 0x81000000 --auth pci:sha1:0,2,3,7并返回了 secret.bin 的值。为了采取额外措施,为了确保它正常工作,我将 secret.bin 加载到“/etc/crypttab”中,运行# update-initramfs -u -k all并重新启动。重新启动后,系统解锁。

我将以下代码复制到“/etc/initramfs-tools/hooks/tpm2”

我将我的 etc/crypttab 附加cryptname UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none lukscryptname UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none luks,keyscript=/usr/local/bin/passphrase-from-tpm

我重写了以下脚本,因为 tpm2-tools 命令已过时,在新命令中进行了编辑,并将其存储在 /usr/local/bin/passphrase-from-tpm 中:

我跑了# update-initramfs -u -k all然后重新启动。在重新启动时,我收到以下错误:/lib/cryptsetup/scripts/passphrase-from-tpm: line 5: /usr/local/bin/tpm2_unseal: not found

我曾多次尝试编辑 passphrase-from-tpm 失败,包括:

  • 将 passphrase-from-tpm 移动到“/boot/efi/EFI/BOOT/”并将 crypttab 引用到该文件
  • 修改 passphrase-from-tpm 以使用 tpm_unseal 的相对文件路径

在我弄清楚如何使用以下方法创建备份 linux 引导之前:

由于该错误,我将完全被锁定在系统之外,并且不得不重新安装 Ubuntu 大约 40 次。我受了很多苦,想辞职,但我太固执了,不敢插旗。

0 投票
0 回答
681 浏览

linux - 为什么我的 initramfs 脚本没有运行?

运行 Ubuntu 18.04 LTS。我在以下位置放置了一个脚本:

/usr/share/initramfs-tools/scripts/init-bottom/dothis

dothis设置为+x。我已经运行sudo update-initramfs -u它似乎可以很好地更新 initramfs 内容。我已经查看/boot/grub/grub.cfg并看到配置了预期的 initrd 文件。

在文件上运行lsinitramfs确实显示脚本已添加。

但是,我找不到任何dothis在启动时运行的证据。根据在线文档,根文件系统应该在/init-bottom脚本运行时就位,这应该是我的“hello world”工作唯一需要的东西,因为它输出到根文件系统上的文件。

为了让这个脚本运行,或者显示它是否正在运行,是否需要执行一些其他步骤?我试图简单地将文本输出到 /tmp 中的文件,但这也没有显示出来。

0 投票
1 回答
3784 浏览

linux-kernel - 在 Yocto 中创建 Initramfs

我想在 yocto 中创建 initramfs。因此,我创建了一个自定义配方,添加了以下几行;需要 recipes-core/images/core-image-minimal.bb IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"

它构建成功。我不确定是否一切正常。我猜内核和u-boot也需要配置。

我的问题是,yocto 是在看到 IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}" 后自动配置内核和 u-boot 还是我应该自己配置它们?

谢谢你。此致

0 投票
1 回答
1522 浏览

linux - 使用 lsinitramfs 时出现“cpio:归档提前结束”

我正在尝试解压缩从嵌入式系统获得的 initramfs 映像,但出现错误,例如cpio: premature end of archive使用任何实用程序解压缩文件时。我将在下面粘贴文件签名和我尝试过的一些东西:

编辑:我忘了提到我已经在 ARM 上尝试了所有这些命令,结果完全相同。

0 投票
1 回答
355 浏览

linux - Wayland 应用程序中的“身份验证失败”

首先,对于一个可能很愚蠢的问题,我很抱歉,这是我第一次尝试与 Wayland 合作。但我用谷歌搜索,找不到任何相关的东西。

我开发的系统在运行图形应用程序时非常关键,所以我设法在 systemd 启动之前在 initramfs 步骤上运行 Weston 和所需的应用程序。一切都很好,除了“正常”应用程序,它们轮流从大文件系统运行,拒绝运行,返回“身份验证失败”错误 #3

这是详细信息。

Initramfs 是基于busybox手工制作的。Weston 的一个应用程序和所需的库(包括 PAM 和其他它拒绝工作的东西)也被复制了。/dev是静态的,具有最少的节点集。/init是一个小型 sh 脚本,它挂载/proc、/run、/sys,运行 Weston 和应用程序,然后挂载主 rootfs 并使用switch_root()传递控制权。除此之外,我将现有的/run安装在/run_old下以保存 Wayland 的套接字。我不确定它是否正确完成,但是 systemd 覆盖了主 rootfs 中的/run,并且应该有一种访问服务器的方法,所以这以某种方式工作。

我还将“ wayland-0 ”套接字和“ wayland-0.lock ”从/run_old链接到主文件系统中的/run

诊断软件(LayerManagerControlweston-info)正在运行并显示有关服务器的信息,但是尝试输出图片的所有内容(因此使用/dev/dri/card0)都因上述错误而失败。

这是一段客户端应用程序 strace:

https://pastebin.com/1K3EDUhB

很明显,它正确附加/run/user/0/wayland-0,然后将 ioctl DRM_IOCTL_GET_MAGIC发送到/dev/dri/card0,然后将(?)魔法发送到服务器的套接字,然后输出失败.

从服务器端看,它看起来像这样:

https://pastebin.com/jkmeMzH7

这条线很有趣:

处理 14 个指向(已删除)/dev/dri/card0的点。以下是所有打开的服务器句柄的列表:

https://pastebin.com/RTFNbEDW

我唯一的线索是switch_root()在切换到主 rootfs 之前递归地删除了 initramfs 中的所有文件,包括/dev/dri/card0(它在带有“已删除”标记的列表中可见)。事实上,新应用程序已经与新的动态创建的 devtmpfs 通信。但我仍然无法理解它如何影响,因为手柄还活着!如果主要/次要编号相同,谁在乎我们确切拥有哪个设备节点以及安装它的时间?所以,线索不是最好的,我什至不知道如何正确检查它。

顺便说一下,这里还有一个 grepped 的服务器跟踪:

这里很清楚第一个图形应用程序正常授权,但后面的不是。

有任何想法吗?

0 投票
1 回答
1050 浏览

ubuntu - ubuntu 卡在 initramfs 内核恐慌退出代码 0x00000100

我有一个 ubuntu 18.04 的系统,我用错误的目录编辑了配置文件(并用源重新加载了配置文件),几秒钟后所有的窗口都开始关闭。重新启动时,我现在得到了 BusyBox 1.27.2 shell,它让我进入(initramfs)。试图输入“退出”,我得到了错误:

run-init: splash: 没有这样的文件或目录

[96. 一些数字] [内核恐慌 - 不同步:试图杀死 init!退出代码=0x00000100

[相同的..]

[相同..] CPU:7PID:1 Comm:run-init 未污染 4.15.0-99-generic #100-Ubuntu

从这里我的硬件,以及一些汇编代码的调用跟踪。

我该如何解决?我从这里找不到配置文件,如果我找到了,我也没有 vi、vim 或 nano 来编辑它。

0 投票
1 回答
612 浏览

linux-kernel - 内核无法在 linux android 10 内核版本 4.9 的 initramfs 中运行 /init

我在我的自定义 initramfs 目录中使用以下命令创建了一个自定义 initramfs: find 。| cpio --quiet -H newc -o | gzip -9 -n > ../diaginitrd.img

然后我使用命令mkbootimg --kernel --ramdisk使用上述 cpio 构建了一个自定义引导 映像

Defconfig 变量如下:

  • CONFIG_BLK_DEV_INITRD=y
  • CONFIG_RD_LZMA=y
  • CONFIG_RD_BZIP2=y

我没有在 defconfig 中提供 CONFIG_INITRAMFS_SOURCE 变量。

给出的内核命令行如下: 内核命令行:console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 androidboot.configfs=true loop.max_part=7 androidboot.usbcontroller=a600000.dwc3 root=/dev/dm-0 rdinit=/init用户调试=31

在构建时,当我解压缩引导映像时,我可以看到我的 initramfs 。在解压 initramfs 时,我可以看到我的 initamfs 的内容。

当我用这个引导映像引导我的设备时,我得到以下日志:

我不确定为什么内核无法读取我的 /init 文件

0 投票
0 回答
1098 浏览

linux - 手动编译内核无法启动:卡在 initramfs 提示符

我正在尝试为我的旧笔记本电脑编译一个自定义内核(它是戴尔 Inspiron 灵越 1525,配备 Core 2 Duo 处理器、2GB 内存和 HDD——不是 SSD)。在这台计算机中,我有 3 个分区,2 个小分区(每个 10GB),其中包含我使用的发行版的根,还有一个大分区用于文件。我正在使用 MX Linux(如果相关)并在安装在 /mnt/files 的大分区中编译内核。我做的第一件事是从 Linus 在kernel.org的 repo 中克隆 v4.19 标签,然后我从当前运行的内核中复制了配置(从/boot/config-4.19.0-9-686-pae),运行make menuconfig,只是更改了版本名称后面的字符串至-copy,保存并退出。然后我编译了。这个内核,其配置刚刚从当前运行的内核复制而来,运行良好。但是,它不是自定义的,因为它只是使用完全相同的配置。

然后我开始了一个新的,再次通过复制当前.config并使用make menuconfig禁用很多我认为与我无关的东西。显然,编译make ARCH=i386 -j3然后make INSTALL_MOD_STRIP=1 modules_install进行得很顺利,但是当我输入时,make INSTALL_MOD_STRIP=1 install我得到了这个:

然而,第一个内核 ( -copy) 也给出了这些警告(并且它正在工作)。这个新的内核 ( -custom) 开始启动,但随后卡在了一个 busybox(initramfs)提示符中。我可以在那里发出一些命令,我​​可以看到有一个带有一些基本程序的文件系统(我想来自busybox)。但它并没有完成启动过程。

当我exit在此(initramfs)提示中执行命令时,我得到了以下内容:

我试图从上面的消息中输入建议,但我不知道该怎么做。如果我cat proc/cmdline在这个相同的 initramfs 环境中输入,我会得到如下信息:

如果我输入cat proc/modules我得到这个输出,如果我输入ls dev我得到这个。(抱歉画质不好)。

我很确定我在配置过程中删除的东西menuconfig是导致问题的原因,如果我从这些消息中了解任何内容,我猜想内核无法挂载根文件系统,也许它找不到分区山?

我的问题是,鉴于这种情况,在 中的设置中是否有任何明显的问题存在.config?这是我的.config 文件