问题标签 [initrd]

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 投票
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 投票
0 回答
479 浏览

embedded-linux - U-Boot 调试诊断为什么在加载 dtb 设备树并且内核无法在 Qemu kvm 中启动后卡住

我不认为serial0别名是主要问题,我希望有更多内核消息表明它实际上正在尝试引导内核。我在 qemu 模拟器中启动它。

欣赏有关如何最好地诊断调试此 U-Boot 问题的提示。仅供参考,内核 uImage 在真正的硬件板上可以正常启动。

0 投票
1 回答
140 浏览

linux-kernel - 向我的 Linux 添加新的设备驱动程序及其对 initrd 的影响

我是 Linux 环境的新手,我遇到了两个概念,vmlinuz 和 initrd。

据我了解,initrd 确定需要加载哪些内核模块以支持当前硬件,并将加载它们,并且还可以加快内核的加载速度。

那么它是如何解决的呢?它如何知道我的笔记本电脑硬件所需的模块?

例如,如果我在不包含指纹设备的笔记本电脑上安装了 Ubuntu,而在另一台带有指纹设备的笔记本电脑上安装了相同的 Ubuntu 版本,那么 initrd 会有所不同吗?

如果它不同,那么每次我添加一个新的内核模块时,initrd 都会被更新吗?

0 投票
0 回答
290 浏览

linux - yocto Linux 内核构建:vmlinux 和 initrd 创建

使用 Yocto 内核构建、core-image-base、qemux86_64:

  1. 如何让 Yocto 生成vmlinux(not vmlinuz) 和 initrd。
  2. 使用自动化脚本时在哪里可以找到这些。

脚本的使用是在 CI/CD 工作流的上下文中使用的,因此需要有一种方法:

  1. 预先计算 Yotco 创建的路径。
  2. 配置 Yocto 以将其移动到定义的位置,例如build/vmlinux-core-image-base-x86_64build/initrd-core-image-base-x86_64

感谢任何提示或提示。

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 文件

0 投票
0 回答
299 浏览

linux - 如何为特定内核版本的 liveCD 创建 initrd.img 文件

我已经创建了 CentOS 7.2 的 LiveCD 映像 (.iso),它可以与我从http://vault.centos.org/7.2.1511/os/x86_64/images/pxeboot获取的 initrd.img 文件一起正常工作/

它使用内核版本 3.10.0-327.el7.x86_64 启动

然而,为了我的需要,我不得不编译一个不同的内核 - 4.14.196 问题是当我启动到 LiveCD 时,它仍然在旧内核上并且不会让我接触到新内核中存在的模块。

我尝试使用以下命令创建一个新的 initrd.img 文件:

但是启动过程遇到了错误:

我的问题是如何为特定的内核版本制作正确的 initrd.img 文件?

谢谢

0 投票
1 回答
341 浏览

installation - grub2:在 grub.cfg 中为 linux 内核和 initrd 映像指定 http 位置

我正在尝试配置网络引导以安装不同的 Linux 操作系统版本。我有一台配置了 httpd、dhcpd 和 tftp 的 CentOS 源计算机。我的 http 服务器托管 ISO 映像的提取文件。

此时,我可以在尝试使用网络安装 CentOS 的另一台机器上获取 grub minu。但是,我无法在 grub 菜单中指定 linux 内核和 initrd 映像 http 位置的路径。我读过 grub2 支持通过 tftp 和 http 启动,但是,找不到一个明确的例子,其中 http 用于加载 linux 和 initrd 映像。我正在使用不支持 efi 的硬件,并且大多数搜索结果都指向通过 http 进行 efi 引导。我已经在目标机器上出现了 grub 菜单,只需要请求 grub2 使用 http 获取内核和 initrd。

我可以在网上找到一个片段,如下所示,但我不清楚如何指定 http 服务器路径等:

在 grub.cfg 文件中使用 http 协议指定 vmlinuz 和 initrd 映像的语法是什么?

0 投票
1 回答
200 浏览

linux-kernel - Yocto面临内核恐慌问题:内核恐慌 - 不同步:VFS:无法在未知块(0,0)上挂载root fs

场景:我在 Yocto linux 项目中工作。我创建了自己的带有 tar.gz 扩展名的 rootfs。而且我已经构建了 linux 内核(使用 bitbake linux-kernel-rt)。我无法加载内核和 rootfs。

谁能解释可能是什么问题。

以下是相同的日志。

0 投票
0 回答
89 浏览

linux - 如果从自定义脚本执行 poweroff 命令,initramfs 会停止

我已经从 debian 10 复制并修改了 initrd 映像(/boot/initrd.img-4.19.0-5-amd64),并将我的自定义脚本添加到scripts/init-top/目录中。在脚本的最后一部分,我正在执行poweroff -f命令,并且在执行命令后启动时,poweroff -f启动会停止reboot: system halted并停留在那里。但是,如果我将其替换为poweroff -freboot -f则系统会正常重新启动并且可以正常启动。过去,我对 Debian 9 的 initrd 映像(无法重新收集版本)做了同样的事情,我在那里放置了相同的脚本,poweroff -f但没有发现任何问题。

现在关于我的自定义 shell 脚本,它安装和更改根磁盘(从已经复制到旧根磁盘中的 qcow2)并卸载它。我为将脚本放入 initrd 所做的更改如下,

我对此非常陌生,并且遵循我为 Debian 9 所做的相同过程。我知道两个 Debian 版本之间可能存在很多差异,但我正在寻找一种从我的自定义脚本中关闭 VM 的方法。此 initrd 将在没有根设备的情况下启动(在 /boot/grub/grub.conf 中指定),因为这样做的目的是用新的 qcow2 替换根磁盘。有没有办法做到这一点?或者我在这里做错了什么?