解析linux根文件系统的挂载过程.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
解析linux根文件系统的挂载过程

一:前言 前段时间在编译kernel的时候发现rootfs挂载不上。相同的root选项设置旧版的image却可以。为了彻底解决这个问题。研究了一下rootfs的挂载过程。特总结如下,希望能给这部份知识点比较迷茫的朋友一点帮助。 二:roo 一:前言 前段时间在编译kernel的时候发现rootfs挂载不上。相同的root选项设置旧版的image却可以。为了彻底解决这个问题。研究了一下rootfs的挂载过程。特总结如下,希望能给这部份知识点比较迷茫的朋友一点帮助。 二:rootfs的种类 总的来说,rootfs分为两种:虚拟rootfs和真实rootfs.现在kernel的发展趋势是将更多的功能放到用户空间完成。以保持内核的精简。虚拟rootfs也是各linux发行厂商普遍采用的一种方式。可以将一部份的初始化工作放在虚拟的rootfs里完成。然后切换到真实的文件系统. 在虚拟rootfs的发展过程中。又有以下几个版本: initramfs: Initramfs是在 kernel 2.5中引入的技术,实际上它的含义就是:在内核镜像中附加一个cpio包,这个cpio包中包含了一个小型的文件系统,当内核启动时,内核将这个cpio包解开,并且将其中包含的文件系统释放到rootfs中,内核中的一部分初始化代码会放到这个文件系统中,作为用户层进程来执行。这样带来的明显的好处是精简了内核的初始化代码,而且使得内核的初始化过程更容易定制。这种这种方式的rootfs是包含在kernel image之中的. cpio-initrd: cpio格式的rootfs image-initrd:传统格式的rootfs 关于这两种虚拟文件系统的制作请自行参阅其它资料 三:rootfs文件系统的挂载过程 这里说的rootfs不同于上面分析的rootfs。这里指的是系统初始化时的根结点。即/结点。它是其于内存的rootfs文件系统。这部份之前在 linux启动过程分析和文件系统中已经分析过。为了知识的连贯性这里再重复一次。 Start_kernel()àmnt_init(): void __init mnt_init(void) { …… …… init_rootfs(); init_mount_tree(); } Init_rootfs的代码如下: int __init init_rootfs(void) { int err; err = bdi_init(ramfs_backing_dev_info); if (err) return err; err = register_filesystem(rootfs_fs_type); if (err) bdi_destroy(ramfs_backing_dev_info); return err; } 这个函数很简单。就是注册了rootfs的文件系统. init_mount_tree()代码如下: static void __init init_mount_tree(void) { struct vfsmount *mnt; struct mnt_namespace *ns; struct path root; mnt = do_kern_mount(rootfs, 0, rootfs, NULL); if (IS_ERR(mnt)) panic(Cant create rootfs); ns = kmalloc(sizeof(*ns), GFP_KERNEL); if (!ns) panic(Cant allocate initial namespace); atomic_set(ns-count, 1); INIT_LIST_HEAD(ns-list); init_waitqueue_head(ns-poll); ns-event = 0; list_add(mnt-mnt_list, ns-list); ns-root = mnt; mnt-mnt_ns = ns; init_task.

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档