rootfs打包方式
参考资料:
initrd和initramfs的基本概念:
initrd(Initial RAM Disk)和initramfs(Initial RAM File System)都是用于在 Linux 系统引导过程中加载临时文件系统的方法,它们的区别如下:
- initrd
- initrd 是最早期使用的一种方式,它是一个固定大小的内存磁盘,其中包含用于启动系统所需的程序和驱动程序。在引导过程中,内核会先加载 initrd 到内存中,然后将其挂载为根文件系统。一旦 initrd 加载完成,它的使命就完成了,此后真正的根文件系统会被挂载到系统中。
- initrd 的缺点是固定大小和浪费空间,因为它需要预先分配一个固定大小的内存块。
- initramfs
- initramfs 是 initrd 的进化版本,它是由内核动态生成的临时文件系统,可以根据系统需要加载所需的模块和文件。相比于 initrd,initramfs 更加灵活和高效,因为它只包含引导所需的文件和程序,不会浪费空间。
- 内核会在引导过程中加载 initramfs 到内存中,并将其作为初始根文件系统。之后,initramfs 负责加载必要的驱动程序和文件,最终将真正的根文件系统挂载到系统中
在了解initramfs之后,说明下两种rootfs打包方式:
1、rootfs与zImage分开镜像
也就是常用的配置方法,rootfs一个镜像,zImage + dtb为一个镜像,uboot一个镜像
内核配置去掉CONFIG_INITRAMFS_SOURCE宏定义
2、rootfs打包进zImage
将 rootfs 编译进内核意味着在编译内核时将文件系统直接嵌入到内核镜像中,而不是作为一个独立的文件系统映像。这种做法通常被称为"initramfs"或"initrd",它允许将根文件系统的内容打包进内核,以便在引导时直接使用。
要实现这一点,你需要在内核配置中启用相关的选项,一般来说,需要设置 CONFIG_INITRAMFS_SOURCE 选项来指定 initramfs 的源文件或目录路径,并启用 CONFIG_RD_GZIP 或其他相关选项来启用 initramfs 支持。