我试图让initramfs使用buildroot和uboot在嵌入式linux设备上工作。我一直在按照指南在buildroot和kernel配置中设置initramfs。尽管输出中包含了CPIO或根FS,但据我所知,它并没有内置到内核中。
我的问题有两个方面。首先,从高层的角度来看,我对引导过程的理解是否正确?
阶段1引导加载程序(特定于Atmel/ARM)启动并停止
阶段2引导加载程序(uboot)初始化一些东西,将内核加载到内存中并运行它
内核将CPIO归档文件放入内存,创建根目录并在该环境中运行init
这意味着芯片上的映像I flash是一个带引导和系统分区的IMG,系统分区是ext4,其中包含CPIO存档。我不知道如何让第三项在这里发生。
其次,就实际配置而言,Buildroot menuconfig有许多文件系统选项
ext2/3/4根文件系统(默认为打开)
cpio根文件系统(用作初始RAM文件系统)
连接到linux内核的初始RAM文件系统
然后在内核配置中
常规->初始RAM文件系统和RAM磁盘(initramfs/initrd)支持
常规->Initramfs源文件(设置为生成的cpio文件)
buildroot在这里生成什么?从我的终端看来,我得到了重复的图像(CPIO和ext4),而CPIO被忽略了。
最佳答案
对于可能有同样问题的人来说,最好的方法是更加熟悉uboot及其选项。尤其是uboot-env.txt在这个过程中扮演的角色。
我对buildroot的理解是错误的。过程是
建筑内核
创建所有根文件系统(ext和CPIO)
使用内部的CPIO重建内核
按照genimage.cfg文件的指示打包ext文件
This如果您对流程感到困惑,可能会感兴趣。
这是系统在做什么
阶段1引导加载程序(特定于Atmel/ARM)启动并停止
第2阶段引导加载程序(uboot)初始化一些东西,然后按照as config的指示操作,将内核从ext4分区写入内存并运行它
这个内核没有cpio,所以它没有运行。
更好地理解进程和组件,我能够重新构造img文件,并使用引导加载程序加载用cpio构建的内核。
关于linux - 使用buildroot和uboot配置initramfs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53672592/