使用buildroot和uboot配置initramfs

时间:2018-12-07 15:36:49

标签: linux kernel u-boot buildroot initramfs

我正在尝试使用buildroot和uboot使initramfs在嵌入式Linux设备上工作。我一直在遵循指南,在buildroot和内核配置中设置了initramfs。但是据我所知,尽管输出中包含了CPIO或根FS,但它并未内置在内核中。

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

  1. 第1阶段引导程序(特定于Atmel / ARM)启动并移交
  2. 第2阶段自举程序(uboot)初始化一些事情,将内核加载到内存中并运行它
  3. 内核将CPIO存档放置到内存中,成为该根并在该环境中运行init

这意味着我刷新到芯片上的映像是具有引导和系统分区的IMG,系统分区是ext4,并且其中包含CPIO存档。我不确定如何使第3项实际上从这里发生。

第二,根据实际配置,Buildroot菜单配置具有许多文件系统选项

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

然后在内核配置中

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

This可能会让您感到困惑。

这是系统正在做的

  1. 第1阶段引导程序(特定于Atmel / ARM)启动并移交
  2. 第2阶段引导程序(uboot)初始化一些事情,然后按照config的指示运行,方法是将内核从ext4分区写入内存并运行它
  3. 此内核没有cpio,因此无法运行。

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