linux内核根文件系统的建立过程

1、首先在start_kernel里由vfs_cache_init注册rootfs并且mount,然后把这个文件系统做为"/"并挂载。   2、init进程调用populate_rootfs加载cpio-initrd(这里只是建立几个文件如:/dev,/root),如果又配置load加载initrd,那么刚才的可能就没用了,这里又分两种情况:   1)如果loader加载的initrd是cpio格式的,做的工作和第1步是一样的。   2)如果loader加载的initrd是image格式的,则建立一个initrd.image文件,并把initrd的内容写到这个文件里。(在下面会。。。)   3、如果不存在/init文件则会调用prepare_namespace,做如下工作:   1)调用mount_devfs,这很重要,这是个设备文件系统,记录了已经创建的设备,包括我的/dev/mtdblock/3   2) 调用mount_root,建立一个指向/dev/mtdblock/3的符号链接的的设备结点名字是/dev/root;之后再调用mount_block_root把/dev/root这个设备做为文件系   统挂到/root目录下。(当然这个设备的文件系统一定要先注册啊)   3)卸载dev文件系统。   4)再把/root这个文件系统移到"/"下,把root目录改成".",也就是刚才的"/root"变成了系统的根目录了,再把dev文件系统挂到真正的根文件系统的/dev目录下。   4、到这里基本上就是把控制权交给应用层的文件系统来处理了,如果loader的命令行里给出了要执行的命令就执行它,否刚执行/sbin/init、/etc/init、/bin/init.   下面是几个不错的链接:   vfs_cache_init   http://blog.chinaunix.net/u2/89957/showart_1851886 .html unpack_to_rootfs(kernel->init)   http://blog.csdn.net/BtInside/archive/2007/09/09/1 777968.aspx   晕个比较好   http://www.linuxforum.net/forum/showflat.php?Board =linuxK&Number=527521
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值