- 论坛徽章:
- 0
|
大家好:
我对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日 |
|