prepare_namespace
2015-09-20 15:13:43 2 举报
`prepare_namespace` 是一个函数或方法,用于准备和管理命名空间。命名空间是编程中用于组织代码和数据的一种机制,它允许程序员将相关的变量、函数和类分组在一起,以避免命名冲突。通过使用 `prepare_namespace` 函数,开发人员可以创建新的命名空间、定义其范围和访问规则,并确保命名空间内的元素不会与其他命名空间的元素发生冲突。这个函数通常在编程语言的库或框架中找到,并且可以根据具体需求进行定制和扩展。使用 `prepare_namespace` 可以提高代码的可读性、可维护性和重用性,使大型项目更加模块化和易于管理。
作者其他创作
大纲/内容
include/linux/namei.h
用户可以用root=来指定根文件系统。它的值保存在saved_root_name中。如果用户指定了以mtd、ubi开始的字串做为它的根文件系统。就会直接去挂载。这个文件是mtdblock、ubiblock的设备文件。
完成实际的”挂载“动作
init/main.c kernel_init()
处理ramdisk类型的initrd,这里不深入研究
最后到了path_lookup这里,这是文件系统中最复杂的操作了,其内容可以写好几页纸,不过基本的输入输出还是不变的。name是输入,path是输出。其中name只是个字符串,几乎没有任何信息,而path中不仅有真正的根文件系统挂载信息,还有根目录项信息,怪不得要落实到path_lookup上来。nameidata是路径查找操作返回的结果,其中有path信息和最后查到的目录名。
fs/open.c SYSCALL_DEFINE1
path结构体是对vfsmount、dentry结构的”封装“
user_path_dir竟然是宏定义,最后代码转换为user_path_at()函数,该函数位于fs/namei.c中。
最后这个结果是什么?path中到底是什么?我们理解,此时的输入是”.“,表示当前目录。目前真正的根文件系统是已经挂载到rootfs的\"/root\"目录上了,那么这个所谓的”当前目录“,在rootfs中就是\"/root\",在真正的根文件系统中就是”/“。最后查找的结果,path中应该是真正的根文件系统的根目录”/“,以这种最自然的方式完成根目录切换。
这个”.“是rootfs的当前目录”/root“
sys_chroot(\".\")
ramdisk_execute_command:在kernel解析引导参数的时候使用。如果用户指定了init文件路径,即使用了“init=”,就会将这个参数值存放到这里。如果没有指定init文件路径,默认为/init。
不是mtd或ubi开头的根文件系统,将根设备结点文件名转换为ROOT_DEV即设备节点号。如果根设备名是以”/dev/\"开头的,把“/dev/\"去掉。
init/do_mounts.c mount_root()
include/linux/namei.c
user_path_at是wrap函数,真正的内容在user_path_at_empty中。
将nfs或磁盘文件系统挂载至rootfs的/root目录
init/do_mounts.c prepare_namespace()
include/linux/path.h
user_path_at_empty函数的关键是filename_lookup函数。
通过宏定义进行代码变换
0 条评论
下一页