免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4361 | 回复: 0
打印 上一主题 下一主题

请教2.6.36内核init/do_mounts.c中prepare_namespace函数中的两句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-05 23:00 |只看该作者 |倒序浏览
大家好:
    我对linux2.6.36内核的init/do_mounts.c文件中的

prepare_namespace函数的最后两句话理解不了,希望大家给予我帮助

。这最后两句代码是:
============================================================
out:
00416:        sys_mount(".", "/", NULL, MS_MOVE, NULL);
00417:        sys_chroot(".");
============================================================
    我先说一下我的一点理解。prepare_namespace函数的功能是挂载

真实的根文件系统。在prepare_namespace函数被调用之前,已经有一

个类型为"rootfs"的文件系统挂载到了linux的vfs的根目录,我们现在

把这个文件系统叫做rootfs。在prepare_namespace函数中,内核会首

先将我们的真正的根文件系统挂载到rootfs的/root目录,然后执行上

面所示的两句代码。
    我感觉上述的2句代码的作用是使pid为1的进程,也就是init进程

的"根目录",变成rootfs的/root,也就是我们指定的根文件系统。
    我的问题是:
    (1)我感觉sys_chroot(".")已经完成了我们需要的功能,为什么还

要调用sys_mount呢?
    (2)sys_mount(".","/",NULL,MS_MOVE,NULL),使用的flag(第四个

参数)是MS_MOVE,也就是子目录树交换,上文描述的情况下就是"/"目

录和"/root"目录进行子目录替换,这可能完成吗??和根目录进行子

目录树替换??如果可以换成的话,那么我们的"."目录不就已经是"/"

目录了吗,为什么还要有sys_chroot(".")的调用呢???
     请各位大牛给予指正。
                                             RenjunQu
                                                                  2011年11月5日
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP