Linux initramfs说明
1.前言
最近在尝试对手头的开发板进行移植,此处记录initramfs挂载的基本流程,记录一下,以备后查。分析时是基于linux3.4.2
2. rootfs的挂载
start_kernel->
vfs_caches_init(num_physpages);
mnt_init(unsigned long mempages)
init_rootfs
register_filesystem(&rootfs_fs_type)
init_mount_tree
do_kern_mount
mount_fs
type->mount
set_fs_pwd
set_fs_root
1. 在vfs_caches_init中会完成VFS的构建,并将rootfs挂载到VFS上,VFS与rootfs有一种水乳交融的关系,rootfs为VFS提供了根目录,而rootfs又作为第一个文件系统挂载到VFS;
2. do_kern_mount 会分配vfsmnt, vfsmnt是对挂载点的描述,它连接了挂载点和待挂载文件系统;
3. type->mount调用的就是rootfs的mount也就是rootfs_mount,rootfs_mount中会创建superblock, 并通过ramfs_fill_super创建出根inode和根dentry,最后完成rootfs挂载,实际上就是将创建的
vfsmnt的挂载点mnt_mountpoint指向新创建的根dentry,挂载的根目录mnt_root也为根dentry。注意实际的文件系统挂载时两者未必一样。
4.set_fs_pwd设置进程的当前路径,set_fs_root设置进程的根路径为根目录
经过如上几个步骤就完成了VFS根目录的创建,搭建起VFS的雏形
3.释放initramfs到rootfs
start_kernel->
vfs_caches_init(num_physpages);
rest_init->
kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND)
kernel_init
do_basic_setup
do_initcalls
populate_rootfs
unpack_to_rootfs
1.populate_rootfs通过调用unpack_to_rootfs 会将initramfs的cpio镜像释放到上一节创建的rootfs中
2.cpio的格式可以参考inux文件系统初始化过程(3)---加载initrd(上)
3.释放过程是通过在rootfs中创建目录,普通文件,链接文件,挂载sysfs, proc等文件系统,使得VFS变成枝繁叶茂的大树
释放过程可参考linux文件系统初始化过程(4)---加载initrd(中)
参考文档
https://www.ibm.com/developerworks/cn/linux/l-k26initrd/
https://www.ibm.com/developerworks/cn/linux/l-vfs/
https://blog.csdn.net/nancygreen/article/details/5027039
https://blog.csdn.net/ooonebook/article/details/52624481
https://blog.csdn.net/scotthuang1989/article/details/43603233 Linux Filesystem: 关于vfsmount的理解
https://blog.csdn.net/yiyeguzhou100/article/details/78426292 initramfs的加载过程(从uboot到kernel)
https://blog.csdn.net/ooonebook/article/details/52624481 [rootfs] InitRamdisk & InitRamfs 介绍和使用
http://www.cnblogs.com/wuchanming/p/3769736.html linux文件系统初始化过程(3)---加载initrd(上)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决