原创 Linux内核及文件系统映像制作笔记(2)

2012-11-18 18:51 1197 18 18 分类: 消费电子

Menuconfig,顾名思义来说,就是菜单一样的选择,这里主要的在于配置系统的类型和相应的硬件的支持的类型,这些必须保证正确,否则后面是会悲剧的。

 

文件系统部分

当内核配置完毕以后,我们的工作基本上完成了一半,注意是一半,那么另一半是啥呢?就是文件系统了,你可能会奇怪,为啥还需要文件系统呢,文件系统对于整个嵌入式系统来说是至关重要的,如果没有文件系统,那么你怎么去确定一个文件安放的位置以及存取的策略呢。

这的确是一个棘手的问题,如果这一点没有,那么即使内核中有了相应的存取文件的功能也是无济于事的。

这里的文件系统并没有想象中那么复杂,就如同搭建一个框架,然后系统可以有一个地图,然后所有的事情就好办了。

这里我们不是从头开始搭建这个骨架,而是用一个工具来帮忙,是的,人的进步是从使用工具开始的嘛。

之前有一点需要说明,那就是我们的内核配置中需要支持我们现在制作的这个文件系统类型,这里是ramdisk,那么就需要在内核中对其进行支持。

我们使用的工具是busybox,关于这个工具的说明,你可以在网上找到好多,所以这里不去细细的讲。这个工具就有点像是一大堆指令的打包,然后你可以进行一定的配置,从而达到你想要执行的指令下的结果。

首先,我们看一下linux的启动的过程,这是在一个linux网站上截取的:

从中我们可以大概的了解到linux的启动过程,而整个的流程,也正是我们制作文件系统的一个理论的基础。

首先,这个inittab是很重要的,这里面系统会在启动的初期知道要去干啥,然后具体的指令是啥,这些都是至关重要的,而且,对于其中的指令,你还需要给系统指明道路,rc.d也是必不可少的,这样以后基本上就进入了shell,也就是一个终端,在这里面就可以开始linux之旅了。

在配置busybox的时候,有一点很重要,那就是使用的编译器的设置,这里使用的是静态的库的链接方式,也就是说,所有的库将提前进行编译,而不是在需要的时候加进来,这样,体积自然会打很多,动态的库可以减小尺寸,也是可以采用的,设定交叉编译器,为相应的arm-linux-gcc这个编译器并不是在主目录下的,你需要找到它,然后输入完整的路径,否则在arm平台下你的程序将因为兼容性方面的问题而无法运行。

Busybox和内核编译的时候有一点不同的是make编译完源文件以后需要进行安装,也就是说,我们的骨架需要构建出来,然后给嵌入式系统使用,他是不会自己自动的去建立这个文件系统所需要的目录的。Make install以后,如果在之前的配置Installation Option中你定义为默认即没有做出改动的情况下,你的文件系统就在_INSTALL这个目录下,而如果你做出了改动,那么就在改正后的名字的目录下。接着你需要给这个安装的目录中在添加一些内容,首先是etc目录,这下面需要有inittab,rc以及motd三个文件,其实不是都需要,inittab是需要的,之前的图已经说明了这一点。而motd就是一个欢迎屏幕上打印的内容,至于rc,这是一个可执行的脚本,主要的任务呢,可以由你制定,只要你对bash有一定的了解,这并不是难事,当然,他必须是可执行的属性。

其次在etc下需要有init.d,从之前的启动流程可以看出,在init.d这里有一个选择,也就是系统所处的终端的状态的选择,可以进行图形化的显示,也可以不这样,那么就是字符的终端界面,当然,这个还是丑了一点。

Dev目录是设备文件所在地,包括设备驱动在内的很多的程序都会去操作这个目录中的设备,而用户程序也需要使用这些驱动来完成相应的任务,包括让用户听到音乐,看到电影,能够创建一个文档并输入内容进行保存,这些都是需要设备的,没有设备,这个系统能够完成的事情几乎为零,所以建立后输入在之后需要的设备,这样就差不多了。

先别急,还有一个lib,就是动态的链接库,这里将会存放将来你需要的一些动态库,当然,我们选择的是静态的编译,不过你的动态链接的程序是需要这里的。

文件系统的整个的骨架就这样完成了,下面就好办多了,首先嵌入式系统的容量有限,在我们做完文件系统后,如果不进行压缩,是无法载入的(我这里不行,也许有的可以,视情况而定),在主机上创建一个空文件,格式化成为ext2fs的格式,然后进行挂载,压缩,这里有一些指令,主要就是dd,mke2fs,mount,umount以及gzip。

最后,我们制作完成的文件系统的映像就可以进行载入了。

 

文章评论0条评论)

登录后参与讨论
我要评论
0
18
关闭 站长推荐上一条 /2 下一条