我正在尝试使用 buildroot 和 uboot 让 initramfs 在嵌入式 linux 设备上工作。我一直按照指南在 buildroot 和内核配置中设置了 initramfs。但是据我所知,它没有内置到内核中,尽管输出中包含了 CPIO 或根 FS。
我的问题是双重的。首先,从高层次的角度来看,我对引导过程的理解是否正确?
- 第 1 阶段引导加载程序(Atmel/ARM 特定)启动并关闭
- 第 2 阶段引导加载程序(uboot)初始化一些东西,将内核加载到内存中并运行它
- 内核将 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 被忽略了。