问题标签 [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 投票
2 回答
8276 浏览

linux - 在 linux 3.10 内核上挂载 usbfs

我确实将 linux 内核从 2.6 升级到 3.10 版本在 init nn 2.6 我确实挂载了 usbfsmount -t usbfs usbfs /proc/bus/usb -onodev,nosuid,noexec

为了启用usbfs,我在内核的配置中做了CONFIG_USB_DEVICEFS=yCONFIG_USB_DEVICE_CLASS=y但它们在3.10内核中已经过时了

那么如何在 3.10 内核上模拟 usbfs?我找到了以下主题https://bugs.launchpad.net/ubuntu/+source/linux/+bug/488274

建议在哪里制作

mount --bind /dev/bus /proc/bus我说

/dev/bus根本没有

有没有人有可以帮助我的想法?

0 投票
1 回答
1259 浏览

linux - Initramfs,为什么需要挂载根文件系统?

为什么操作系统需要initramfs,为什么没有这个文件就不能挂载根文件系统?为什么我们不能直接挂载root fileststem,而是需要一些中介(intramfs)?以及如何从内核级别(内核端)挂载文件系统?

0 投票
2 回答
11290 浏览

linux - 如何在 ARM 板上获得有效的 rootfs (initrd)?

我正在尝试使用 AT91RM9200 (ARM920T) 在 CSB337 板上制作嵌入式 linux。我使用 at91rm9200_defconfig 编译内核 3.2.63。我看到内核正在启动,但我遇到了 rootfs (initrd) 的问题。我将尝试解释上下文,但如果没有必要,您可以直接转到主题末尾的内核消息。

据我了解(我是嵌入式 linux 世界的新手),我可以选择安装 rootfs:initramfs、initrd、nfs 或 jffs2(直接来自闪存)。我的第一个目标是让 linux 工作,无论如何。所以所有解决方案对我来说都是可以接受的,但我必须选择一个开始。jffs2 的解决方案似乎是最困难的,因为我的闪存已经格式化为 TFS(来自 MicroMonitor 引导加载程序的几乎未知的文件系统)。使用 nfs 的解决方案可能很棒(至少对于测试而言),但即使在两台 linux PC 之间我也很难使 nfs 工作。所以,最后,我必须在 initramfs 和 initrd 之间做出选择。我决定从 initrd 开始,因为我相信修改比 initramfs 更灵活。

为了创建rootfs,我使用了具有最低配置的busybox(删除了除“初始化实用程序”之外的所有小程序,静态编译)。之后,我将 rootfs 压缩为 img.gz 并通过 tftp 将其发送到目标内存(与 zImage 相同)。我使用内核启动参数:“root=/dev/ram0 rw initrd=0x20100000,307331”。结果,我有这个内核输出:

问题是:我的问题是什么?我可以想象没有文件系统支持,但在我的内核配置中我有:

如果有必要,我可以提供我的 .config 文件。

预先感谢您的所有评论。

在这篇文章中留下评论后(见下文),我尝试通过 buildroot 和集成的 initramfs 编译内核。现在它看起来更好但仍然无法正常工作。

0 投票
2 回答
845 浏览

linux - 在 Bootpimage 的情况下,initrd 真的会减小内核映像的大小吗?

根据维基百科关于 initrd 的文章“许多 Linux 发行版都提供一个单一的通用内核映像——发行版的开发人员打算在尽可能广泛的硬件上启动。这个通用内核映像的设备驱动程序作为可加载模块包含在内,因为将许多驱动程序静态编译到一个内核中会导致内核映像变得更大,可能太大而无法在内存有限的计算机上启动。这就引发了检测和加载在引导时挂载根文件系统所需的模块的问题,或者就此而言,推断出根文件系统的位置或内容。为了避免将这么多特殊情况的处理硬编码到内核中,使用了带有临时根文件系统(现在称为早期用户空间)的初始引导阶段。"

我的问题是,如果我们在 initrd 中而不是在实际的内核映像中添加加载实际文件系统所需的模块等来保存保存,那么在内核和 initrd 组合形成单个 bootpimage 的 Bootpimage 的情况下我们将实现什么。即使使用 initrd,内核的大小也会增加。

有人可以澄清吗?

0 投票
0 回答
82 浏览

linux - 在 Linux initrd 映像中,以太网无法工作

我正在研究使用 i.Mx6 四核处理器的 SABRE SD 开发板。我为此板开发了一个 initrd 映像。内核启动,initrd 映像安装成功。甚至 fec 以太网驱动程序也已正确加载。

但是在初始化过程中,dhcp 无法为以太网设备指定一个 ip。

在对“dhcp”命令使用 strace 实用程序进行分析时,获得了以下日志:在日志中,选择系统调用超时导致错误。下面给出了日志的选择性部分。

但是,当 initrd 映像中使用的相同 rootfs 用于 SD 卡引导时,dhcp 命令不会失败。

任何人都可以帮助我提供一些线索吗?

带着敬意,

维韦克

0 投票
2 回答
2085 浏览

linux - ARM Linux 启动的一些细节

我试图了解 linux 在 arm 架构上启动的细节。我在互联网上进行了大量搜索,到目前为止了解了一些细节,尽管我觉得每次阅读一篇文章都会带来很多其他新术语,这让事情变得更加复杂。我确实有 2 个运行 linux 的板,一个 olimex 9261 和一个 beaglebone black。我在嵌入式系统尤其是 arm 方面的专业知识非常好,但在 linux 上玩的并不多(除了一些用户空间程序和内核中的 char 驱动程序)。

以下是我的问题:

一块一块板我有以下uboot输出(linux 2.6.30):

该板有 64MB RAM(映射在 0x20000000)、512MB nand flash(目前没有找到映射)和 2MB 数据闪存(映射在 0xc0000000)。

我在这里不明白的是:

  • 为什么 bootargs 中有 mem=64?这不应该作为 ATAG 或 DTB 给出吗?
  • 当我们将控制权传递给内核时,为什么会有一个控制台作为参数?使用 tty 的内核是否已经由 uboot 配置?
  • initrd 与 rootfs。这对我来说仍然不清楚。我知道 initrd 可以作为块设备或单独的映像包含在内核中,uboot 必须将地址详细信息传递给内核(真的吗?)。我们能否拥有一个不包含 initrd 的内核 + 另一个文件系统,如 jffs2,内核将从该文件系统运行其余驱动程序?实际上我无法理解内核在启动时使用的文件系统的全部细节。在我的这个设置中,有 4 个文件:uImage、bootstrap、env.bin 和 jffs2 文件系统。所以没有initrd。这是如何工作的?以及上述 bootargs 中指向的文件系统的 root 过程如何?在我的理解中,内核应该首先访问 jffs2 文件系统,然后抓取 /dev/mtdblock1 中的映像并挂载它。也许我的理解是错误的。实际上内核和文件系统之间的这种交互是我似乎不理解的。在上面的 bootcmd 中,内核从 nand 复制到 sdram,然后 bootm 跳转到它。但是内核如何在引导时找到 jffs 呢?我在引导期间看到此输出行:VFS: Mounted root (jffs2 filesystem) on device 31:1。

在董事会用户指南中,我发现了这一点:

警告:由于 AT91SAM9261 芯片勘误表不支持从 NAND 闪存引导。

...

512MB NAND 闪存(在 Linux 中被视为硅驱动器)。

  • 编译内核后,我观察到 System.map 没有所有符号。我检查了vmlinux,它是一样的。有谁知道为什么?也许编译器没有正确配置?

非常感谢,丹尼尔。

0 投票
1 回答
6041 浏览

linux - 在 initramfs Raspbian 中将 Squashfs 挂载为 Root

我目前正在尝试通过 initramfs 从 squashFS 映像启动我的 raspbian。squashfs 映像位于文件系统 /dev/mmcblk0p1 上,因此我在安装映像之前先安装它。

不幸的是,我一直在挂载 SquashFS Image 文件。

我尝试通过安装

但我总是得到

所以我尝试手动通过循环安装它。问题是,安装 /dev/loop0 失败并出现与上述相同的错误。

到目前为止,这是我的初始化:

检查

告诉我,squashfs 图像已附加到 loop0。

有人知道从哪里开始吗?

0 投票
1 回答
1697 浏览

linux - 启动时如何加载模块?它们在启动时加载的顺序是什么?如何改变它?

我正在寻找如何在启动时加载模块。

谁将在系统启动时加载模块。

我正在使用 raspbain 操作系统。

在升级到设备树之前,我的模块加载良好,但升级后我的模块加载不同。

为了避免这种情况,我使用 softdep 以我想要的方式加载模块。

但是现在我想删除那些softdep,并希望我的模块在没有设备树的情况下以它们加载的方式加载。

任何人都可以澄清这个关于他们加载的方式和顺序以及谁将在启动时加载模块的疑问

0 投票
2 回答
2031 浏览

linux - 在 initrd 映像中重新启动

我正在寻找一种从 init-bottom 脚本*中重新启动/重置我的 linux 系统的方法。在执行我的脚本时,系统位于 /root 下,我可以访问一个 busybox。

但是我的busybox中的“重启”命令不起作用。还有其他可能吗?


我的系统使用 initramfs 映像正常启动,我的脚本最终导致更新过程。debian 附带的新 systemd 激怒了这一点。但是通过电源重置一切都很好。

0 投票
1 回答
1491 浏览

linux - 使用 preseed 在 Debian 安装完成之前运行脚本

我正在尝试在 Debian Wheezy 安装完成之前运行一个脚本。我知道“di preseed/late-command”,即。在安装完成之前使用运行命令。但我面临一个问题。我无法弄清楚在 iso 文件中复制脚本的位置。我尝试了以下两种方法:

  1. 我尝试将脚本复制到 initrd.gz (/install.386/initrd.gz) 文件的根目录中,并在 preseed.cfg 中进行了以下更改:d-i preseed/late-command in-target sh /my_script.sh
  2. 我还尝试将我的脚本复制到 iso 文件的根目录中,并在 preseed.cfg 中进行了以下更改:d-i preseed/late-command in-target sh /media/cdrom/my_script.sh

那么,在哪里复制文件(在我的脚本中)以便我可以在后期命令中使用它?