免费注册 查看新帖 |

Chinaunix

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

Linux启动过程中文件系统的加载 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-07 11:05 |只看该作者 |倒序浏览
Linux启动过程中文件系统的加载

前言:我觉得我的文章相对来说都是比较浅显的。一些初学者可以看看,这也是我不在嵌入式那个版上发文的原因。对于高手来说,如果你们不吝啬时间的话,希望也能帮我看看,指点一下其中的错误。这也是我到这里来和大家交流的目的。
    在完成了模块驱动后,就要挂载文件系统了。我一直以为:
我编译的内核是采用了initrd的模式,设备是在RAM DISK文件系统下的/linuxrc脚本程序加载的,因此在这上面浪费了很多时间。不过对initrd算是有了比较深的理解,这个等一下再说。
其实,内核挂载的第一个文件系统就是nand flash中的root.cramfs,关于挂载相关的代码mount_root()在文件/fs/super.c里面。随后将devcie文件系统挂载到/dev目录下面,代码为mount_devfs_fs()。因为采用了noninitrd的模式,因此文件系统的挂载就完毕了,init进程继续往下走到一直到运行:
if (execute_command)
              execve(execute_command,argv_init,envp_init);
这里init切换成另外一个线程,运行程序在execute_command中定义。execute_command是vivi传进来的命令行,启动过程中可以看到:
Kernel command line: noinitrd root=/dev/bon/2 init=/linuxrc console=ttyS0
       因此execute_command对应/linuxrc,因此程序运行根目录下的脚本linuxrc,在我的系统中他对应:
       #!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc
/bin/cp -a /mnt/etc/* /etc
echo "re-create the /etc/mtab entries"
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 /
/bin/mount -f -t ramfs ramfs /etc
exec /sbin/init
这个就不解释了(最后是启动bash),大家可以在linux下把root.cramfs挂载到/mnt下面看看内容就知道了:
mount –t cramfs –o loop root.cramfs /mnt/cramfs
这里其实想告诉大家,我们如何实现开机自动加载一些运行程序,现在应该很明白了吧,写个脚本就OK了。(其实是我以前一直在yy这个问题)
最后讲一下initrd(initail ram disk)
原理我就不说了,陈词滥调了,网上多的很。我将一点我的理解,initrd包含了部分module的驱动,从一定程度上分担了内核的大小,因为启动的时候这两者还是要同时被load到memory中去的;因此更重要的是它可以保证内核的可移植性,对不同的硬件平台,只要提供不同的initrd文件系统,而内核可以保持不变。因此,initrd的主要作用是加载一些复杂的与平台相关的硬件,如SCSI硬盘驱动,网卡驱动(像无盘工作站,使用nfs)等。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20375/showart_124493.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP