为什么要进行内核裁减和文件系统定制

嵌入式Linux是一种高度客制化的Linux系统,这是因为嵌入式产品的资源有限,在早期的Linux系统中,对硬件的支持的驱动需要集成到Linux内核中,为了保证系统运行可靠稳定,就要求针对特定硬件平台剔除不相关的硬件驱动,删除不必要的系统服务,使裁减后的嵌入式linux仅占用最少的内存和存储空间,并且能支持特定硬件平台的所有接口。

DEL是一种简单易用的嵌入式Linux操作系统,可以运行在所支持的Digi的核心板上。Digi核心板有不同的型号,所支持的硬件接口也千差万别。Digi核心板的开发套件是来用学习和验证Digi核心板功能,每种核心板都预置有一套在开发套件上验证过的启动器和嵌入式系统。这套预编译并预置好的系统支持一些默认的接口,但并不一定满足客户需求,或者对用户来说它可能囊括了过多的接口支持和系统服务。通常用户选择核心板来设计一种硬件产品时,它所需的接口就大致确定下来,因此需要针对自己的硬件进行嵌入式系统的内核和文件系统的定制与裁减。

当用户针对硬件产品开发好应用程序时,也需要最终把该应用程序放到文件系统中,并添加相关启动脚本以便产品开机后能自动运行相关应用程序。对文件系统增加一些特定的程序和库文件,也是文件系统定制的重要组成部分。

内核与文件系统的定制

内核和文件系统定制分别在Digi ESP for Embedded Linux帮助中的第6章和第7章,可以参考这两个章节进行相关操作。

DEL内核裁减与文件系统定制前的准备

DEL采用Digi ESP这个基于Eclipse深度定制的IDE来进行软件开,内核文件系统的定制也是通过ESP软件就可以完成。在创建内核文件系统项目之前,请检查一下Help>About,确保您的DEL已经升级到5.9.8以上。注意只有升级完成后创建的项目才能使用最新的ESP进行编译,所以如果您在升级之前有创建过文件系统项目,请删除重新创建建,以便DEL能使用最新的BSP驱动支持。

创建DEL的内核和文件系统项目

通过菜单File>New>Digi EL Kernel/Rootfs/U-Boot Project,来创建一个内核和文件系统项目,如果需要您也可以同时创建内核模块、UBoot和应用程序项目。输入项目名称,选定模块类型以及要创建的项目类型,本例以ConnectCore Wi.MX53模块为硬件平台,如下图的示,单击下一步:

按下图设置网络文件系统和TFTP服务器根目录,DEL光盘集成有很多utility和服务,比如TFTP服务器默认就已经安装好了,这里把TFTP根目录作为编译的输出,编译好的内核会自动拷到该目录下,当用ESP项目中“Install”按钮打包文件系统镜像时,也会把生成的文件系统镜像拷贝到TFTP根目录/tftpboot中。

按下Finish,完成项目创建,相关项目会列在左侧Project Explorer中。

内核的裁减

右键单击项目名称,在弹出的菜单中选择Configure Project,内核的配置UI就会弹出来,可以根据自己的需要进行勾选。一些复选框选项勾选后会是一个小圆点,再勾选一次才会打勾,方框中的小圆点表示这些选项是可以编译成动态加载的模块。

?400

对于一些接口的驱动支持,请参考ESP帮助文档中设备与接口对应章节的说明,或是认真阅读配置菜单中的相关项目说明。对内核配置的修改实际上保存在build/.config-<variant-name>文件中,可以通过ls -a查看到该文件。配置好内核选项后,保存就可以进行编译。如果碰到编译不通过的地方,应仔细查阅出错说明,修正,直到编译成功为止,在/tftpboot下就会生成编译好的内核。

文件系统的生成

文件系统镜像实际上是把所需的内核和驱动,应用程序,库文件等打包到一个分区镜像,以便烧录到flash中,编译完内核后,仅生成内核镜像,但linux运行所需的各种程序文件,脚本,库文件等还有待于打包生成,您可以在此过程添加一些第三方程序或自己的文件。

我们可以像内核配置一样配置预加载的程序或库文件,右键单击项目名,选择项目配置后,在内核配置选项的下方,有一个Rootfs configuration,这里可以定义一些预加载的程序,比如数据库支持,QT例程和库等。还可以参考帮助文档第七章节,把自定义的程序也加到Rootfs当中。当项目编译完成后,会带有这些预编译的程序,我们也可此时再添加一些自定义的脚本文件,或是交叉编译的第三方程序文件等。

项目编译完成后,把必要的文件添加或拷入到项目文件系统中对应的路径,右键单击项目,选择Install Project,就会把文件系统打包生成rootfs镜像,并拷贝到/tftpboot目录下。

在核心板上U-Boot中,您可以通过

#dboot linux tftp

来直接从tftp服务器中加载内核进行测试,启动没有问题后,再使用U-Boot的update命令更新到flash当中。