以前也制作过根文件系统,但是都是按照网上写好的文档一步步来操作。系统虽然做出来了,但是为什么要那样做,创建的每个目录文件都干什么的,还是一头雾水。近段时间好好的研究了一下根文件系统的制作方法和过程。将我的收获和理解记录下来,让自己好好梳理一下思路,也供读者参考。
说明: 1)本文旨在探讨跟文件系统结构和制作方法,不讨论启动方式,下面的实验都是采用nfs方式启动系统的。
2)一个成熟的文件系统,下面有很多目录。这里每个目录当然都有其作用,但是对于linux来说,要想正确启动起来仅仅用到其中的几个即可。下面我将由简到烦,从最简单的文件系统开始做起,然后一步步添加,直至完整。
第一个必须要有的就是被誉为“嵌入式开发中的瑞士军刀”的busybox。首先你要下载busybox源码,然后进入其根目录。下面要做的工作就非常简单了,俗称三部曲。(1)配置,(2)编译,(3)安装。
(1)配置:进入busybox根目录,执行make menuconfig,这里只需配置两项。
第一项:Busybox Settings -->build Options -->
如下图:选上静态链接,设置交叉编译器
第二项: Busybox Settings -->Installation Options -->
如下图:设置安装路径
(2)编译和(3)安装
busybox根目录下,依次执行:
make
make install
到此,busybox安装设置完毕,我们将会在我们指定的安装目录下看到生成的目录和文件。我的在root_nfs目录下。
第二个要做的就是dev目录,进入root_nfs目录。依次执行下面的命令,在dev目录下建立两个设备文件。:
#mkdir dev
#cd dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
第三个要做的就是etc目录,进入root_nfs目录。依次执行下面的命令:
#mkdir etc
#cd etc
#gedit inittab
在initab文件下输入下面的内容:
保存,退出。
到此,一个最小的根文件系统制作完成了。启动结果如下:
总结:linux要想正常启动所需的根文件系统里面的内容主要就这几个。为什么是这几个,通过阅读linux内核的kernel_init()函数最终跳转到的init_post()函数可以知道。init_post()函数的执行,需要这些文件。