2

我正在尝试使用 buildroot 和 uboot 让 initramfs 在嵌入式 linux 设备上工作。我一直按照指南在 buildroot 和内核配置中设置了 initramfs。但是据我所知,它没有内置到内核中,尽管输出中包含了 CPIO 或根 FS。

我的问题是双重的。首先,从高层次的角度来看,我对引导过程的理解是否正确?

  1. 第 1 阶段引导加载程序(Atmel/ARM 特定)启动并关闭
  2. 第 2 阶段引导加载程序(uboot)初始化一些东西,将内核加载到内存中并运行它
  3. 内核将 CPIO 存档放入内存,使其成为 root 并在该环境中运行 init

这意味着我闪存到芯片上的映像是一个带有引导和系统分区的 IMG,系统分区是 ext4,其中包含 CPIO 存档。我不确定如何从这里真正实现第 3 项。

二、在实际配置方面,Buildroot menuconfig有很多filesystems的选项

  • ext2/3/4 根文件系统(默认开启)
  • cpio 根文件系统(用作初始 RAM 文件系统)
  • 链接到 linux 内核的初始 RAM 文件系统

然后在内核配置中

  • 常规 -> 初始 RAM 文件系统和 RAM 磁盘 (initramfs/initrd) 支持
  • General -> Initramfs 源文件(设置为生成的cpio文件)

buildroot 在这里生成什么?从我的角度来看,我似乎得到了重复的图像(CPIO 和 ext4)并且 CPIO 被忽略了。

4

1 回答 1

0

对于可能有同样问题的人来说,最好的方法是更加熟悉 uboot 及其选项。特别是 uboot-env.txt 在此过程中扮演的角色。

我对 buildroot 的理解是错误的。过程是

  1. 构建内核
  2. 创建所有根文件系统(ext 和 CPIO)
  3. 使用内部的 CPIO 重建内核
  4. 按照我的 genimage.cfg 文件的要求打包 ext 文件

如果该过程让您感到困惑,这可能会引起您的兴趣。

这是系统在做什么

  1. 第 1 阶段引导加载程序(Atmel/ARM 特定)启动并关闭
  2. 阶段 2 引导加载程序 (uboot) 初始化一些东西,然后按照 as config 的指示运行,将内核从 ext4 分区写入内存并运行它
  3. 这个内核没有cpio,所以它没有运行。

更好地了解进程和组件我能够重组我的 img 文件并使用引导加载程序加载使用 cpio 构建的内核。

于 2018-12-07T23:00:45.600 回答