问题标签 [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 回答
211 浏览

mount - mkdir 并挂载到 initramfs

我正在编写一个initramfs,在busybox中执行,我在其中使用这些命令安装了一个分区:

但是当系统启动时,我有这个错误:

我知道当找不到设备时,会出现类似 的消息Device does not exist,所以我认为问题出/mnt/saved在尚未正确创建的目录上。

我尝试在之后添加一个ls -l /mntmkdir检查目录是否正确创建,但大多数情况下,如果我这样做,错误就会消失。所以我虽然问题可能是同步问题(tmpfs,很奇怪!)所以我尝试了一些其他的事情,比如在目录中创建一个虚拟文件来强制一种同步。这可行,但这是一个肮脏的解决方法,我想找到问题的真正原因以构建一个干净的解决方案。

0 投票
1 回答
403 浏览

linux - 在早期启动期间使用 initramfs 加载密钥并设置 IMA/EVM

我正在尝试在 Debian Buster 内核 v5.7.13 中创建一个为 Linux 的 IMA 子系统加载一些密钥的初始化脚本。按照此手册页evmctl上的说明,我编写/复制了一个脚本,/etc/initramfs-tools/scripts/local-top/ima.sh如下所示:

之后,我通过运行update-initramfs -u它来更新我的 initramfs 图像,该图像运行完成而没有错误。但是,当我尝试启动机器时,出现以下错误(从我的 VM 截屏)。

initramfs 错误

我在这里错过了一步吗?如何使某些文件可用于我的 initramfs 脚本?当系统完全启动时,我能够很好地执行脚本。

感谢您的帮助。

0 投票
1 回答
319 浏览

yocto - 使用 yocto 创建尽可能小的 rootfs

我想创建一个最小的 Linux 系统。我自己编译了内核,但我想使用 Yocto 来构建我的 rootfs。如何在不构建内核的情况下构建最小的 rootfs 来启动和系统并打开 shell?另外,如何选择 rootfs 的类型?我希望它是 initramfs,这样我就可以将它嵌入到我的内核映像中。

0 投票
0 回答
951 浏览

linux - 写入文件系统信息时出错:输入/输出错误

上网本有一个 system-lubuntu 18.04.5 64 位。如果突然关闭电源、按键关闭或其他不可抗力,当上网本不是通过“关机”关闭时,系统启动时会出现错误“/dev/sda1: UNEXPECTED INCONSISTENCY;”。意外的不一致屏幕

我写 fsck /dev/sda1,结果是“写入文件系统信息时出错:输入/输出错误”。输入输出错误画面

上网本仅用于访问网络。磁盘上没有有价值的数据,除了设置和 chrome 浏览器。问题:如何使一切正常,也许有一些命令可以修复错误,因为磁盘上没有任何有价值的东西(理想情况下,保存设置和chrome),以免重新安装系统?或者您可以为旧/弱 PC 推荐更稳定的操作系统(上网本:CPU Intel Atom N450 1.66 ghz,1gb RAM,250gb)?

smartmontools 检查结果:

0 投票
1 回答
356 浏览

buildroot - Buildroot initramfs 启动到非交互式busybox shell

我正在使用 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:下面是我的初始化代码:

0 投票
0 回答
836 浏览

linux - switch_root 的正确方法

我在为我的嵌入式目标设置启动时遇到了很多(半个)问题;情况是:

我有一个嵌入式目标,它有一个相当小但可靠的闪存(16M 字节)和一个可能很大(当前为 8GB)但相当不可靠的 SD 卡。

SD卡的不可靠性主要是由于硬件设置(直接连接到电源,所以如果它“严重”唤醒,硬件重置它没有办法)我无法改变。这主要影响 u-boot(Linux 处理似乎更稳定)。

由于我需要相对较高的可靠性,即使在软件更新期间/之后,我也选择了带有“恢复”后备的拨号系统(更新休眠的,然后重新启动)。

不幸的是,我在 Flash 中没有足够的空间来安装适当的 initramfs 和完整的恢复系统,所以我试图将启动系统与恢复结合起来。

因此,我有一个完整的闪存系统,其中包含一个/init选择启动模式的小脚本。

/init脚本类似于:

这显然是从bootargs包含开始的tryboot=A/B/R

我没有使用 Busybox switch_root,因为这不是真正的 initramfs,而是基于 Flash 的 SquashFS;我当前的 u-Boot 环境包括:

当前的问题是系统因exec chroot . sbin/init ...“内核恐慌 - 不同步:试图杀死 init !”而死机。没有打印“罪魁祸首”+ exec chroot . sbin/init <dev/console >dev/console 2>&1行的错误。

注意 1:我确保sbin/init新根 fs 上存在(它是指向bin/busybox

注意 2:即使我注释掉之前umount mnt的 .

我究竟做错了什么?

0 投票
0 回答
29 浏览

kernel - 添加“文件”实用程序后出现内核崩溃,导致 rootfs.cpio 庞大

我正在将 Initramfs 用于定制芯片,目前在 FPGA 平台上。在使用 make 生成 linux 映像之前,我运行了 make menuconfig 并添加了“文件”实用程序。它将 rootfs.cpio 的大小增加了 3 倍,而 vmlinux 的大小则相对相同。启动后,我收到以下消息:

----- 在文件 init/initramfs.c 中输入函数,第 463 行压缩数据魔术:0x1f 0x8b 检测到 gzip 压缩数据 ------ 在文件 init/initramfs.c 中输入函数,第 468 行交换器调用 oom-killer : gfp_mask=0x200d2, order=0, oom_score_adj=0 [ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name 内核恐慌 - 不同步:内存不足且没有可杀死的进程...

有一个自定义工具可以将此 vmlinux 转换为另一个可以加载到 FPGA 闪存中的二进制文件。

那么我应该在哪里进行更正?在 buildroot 设置或生成 fpga flash 二进制文件的脚本中?

0 投票
1 回答
753 浏览

busybox - 试图在busybox中挂载/dev/sda

我正在使用 Proxmox 虚拟机。我选择哪种存储类型(scsi、ivirt 或 sata)似乎无关紧要,我在busybox 中看不到任何块设备(即在/dev或下fdisk)。

我使用这些说明将 PXE 设置为 busybox 提示符:

https://jootamam.net/howto-initramfs-image.htm

如果我能看到驱动器。然后我可以解压一个更大root.fs的文件并使用busybox/ initramfsto switch_execto sda1(类似于这些说明tmpfs。但是因为我不能,所以我仅限于解压到 tmpfs/ram。

有我需要加载的模块吗?

0 投票
1 回答
90 浏览

linux - 如何在 initramfs 中运行自定义程序

我已经构建了我想用来设置 dm-verity 的 initramfs。出于测试目的,我不 switch_root 并且在启动后它停留在 initramfs 中。但是我需要工具veritysetup。我已将它预编译并复制到 initramfs 上的 /usr/sbin,但是当我在平台上运行它时,它显示 - /bin/sh: /usr/sbin/veritysetup: not found。任何想法如何使其执行?

0 投票
1 回答
117 浏览

raspberry-pi - 使用 JasperE84/root-ro 脚本更改内核 switch_root

我目前正在使用稍微修改的脚本https://github.com/JasperE84/root-ro从 squashfs 映像引导系统。它几乎按预期工作。

它确实从映像引导到新的只读文件系统,但是,它从“主”系统(即在其上构建 initramfs 的系统)使用内核引导。我尝试使用 initramfs 中的 switch_root 命令,但我无法让它工作,实际上因为这个脚本创建了覆盖,我认为我根本不应该使用 switch_root。

有人可以帮助我提供有关如何引导到只读映像中的内核而不是构建 initramfs 的内核的想法或解决方案吗?

乌鲁斯