Linux 操作系统是UNIX 操作系统的一种克隆系统。它诞生于1991 年的10 月5 日(这是次正式向外公布的时间)。以后借助于Internet 网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用多的一种UNIX 类操作系统,并且使用人数还在迅猛增长.Linux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络 。
Linux是的自由电脑操作系统内核。它是一个用C语言和汇编语言写成,符合POSIX标准的类Unix操作系统。Linux早是由芬兰黑客林纳斯.托瓦兹(Linus B. Torvalds)为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,林纳斯·托瓦兹当时在Usenet新闻组comp.os.minix登载帖子,这份的帖子标示着Linux计划的正式开始。在计划的早期有一些Minix黑客提供了协助,而今天无数程序员正在为该计划无偿提供帮助。 技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
大家看了上面Linux 操作系统应该对它有一定的了解,现在就让我来介绍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/shecho "mount /etc as ramfs"/bin/mount -n -t ramfs ramfs /etc/bin/cp -a /mnt/etc/* /etcecho "re-create the /etc/mtab entries"/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 //bin/mount -f -t ramfs ramfs /etcexec /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)等。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。