1.5 嵌入式Linux发展面临的挑战
目前嵌入式Linux 正在蓬勃发展,并已形成了很大的市场,除了一些传统的Linux公司,一些专门开发嵌入式Linux的公司也应运而生。但是就技术而言,嵌入式Linux离市场的真正需求还有一定的距离,需要在以下几个方面加强开发:
第一,实时性扩充。实时性是嵌入式操作系统的基本要求,由于Linux还不是一个真正的实时操作系统,内核不支持事件优先级和抢占实时特性,所以在开发嵌入式Linux的过程中,首要问题是扩展Linux的实时性。对Linux实时性的扩展可以从两方面进行:向外扩展和向上扩展。向外扩展即从范围上扩展,让实时系统支持的范围更广,支持的设备更多。
目前的开发所面向的设备仅限于较简单的有实时要求的串/并口数据采集、浮点数据计算等,而像实时网络这样的高级应用还需进一步发展。向上扩展是扩充Linux内核,从功能上扩充Linux的实时处理和控制系统。如嵌入式系统RTLinux,它的基本原理是将Linux本身的任务及Linux内核本身作为一个优先级最低的任务,而实时任务作为优先级最高的任务,即在实时任务存在的情况下运行实时任务,否则就运行Linux本身的任务。实时任务不同于Linux普通进程,它是以Linux的可装载的内核模块(Loadable Kernel Module, LKM)的形式存在的,需要运行实时任务的时候,将这个实时任务的内核模块插入内核,实时任务和Linux一般进程之间的通信通过共享内存或者FIFO通道来实现。
第二,改变Linux内核的体系结构。Linux的内核体系采用的是Monolithic,在这种体系结构中,内核的所有部分都集中在一起,而且所有的部件在一起编译连接。这样虽然能使系统的各部分直接沟通,有效地缩短任务之间的切换时间,提高系统的响应速度和CPU的利用率,且实时性好,但在系统比较大时体积也比较大,这与嵌入式系统容量小、资源有限的特点不符。而另外一种内核体系结构MicroKernel,在内核中只包括了一些基本的内核功能,如创建和删除任务、任务调度、内存管理和中断处理等部分,而文件系统、网络协议栈等部分都是在用户内存空间运行。这种结构虽然执行效率不如Monolithic内核,但大大减小了内核的体积,同时也方便了整个系统的升级、维护和移植,更能满足嵌入式系统的特点需要。为此,要使嵌入式Linux 的应用更加广泛,若将Linux 目前的Monolithic内核结构中的部分结构改造成MicroKernel 体系结构,可使得到的Linux 既具有很好的实时性,又能满足嵌入式系统体积小的要求。
另外,Linux 是一个需要占用存储器的操作系统,虽然可以通过减少一些不必要的功能来弥补,但可能会浪费很多时间,而且容易带来很大的麻烦。许多Linux的应用程序都要用到虚拟内存,这在许多嵌入式系统中是没有价值的。所以,并不是一个没有磁盘的Linux嵌入式系统就可以运行任何Linux应用程序。
第三,完善Linux的集成开发环境。提供完整的集成开发环境是每个嵌入式系统开发人员所期待的。一个完整的嵌入式系统的集成开发环境,一般需要提供编译/连接器、内核调试/跟踪器和集成图形界面开发平台。其中的集成图形界面开发平台包括编辑器、调试器、软件仿真器和监视器等。在Linux系统中,具有功能强大的gcc编译器工具链,使用了基于GNU调试器 gdb的远程调试功能,一般由一台客户机运行调试程序调试宿主机运行的操作系统内核;在远程开发时还可以使用交叉平台的方式,如在Windows平台下的调试跟踪器对Linux的宿主系统进行调试。但是,Linux在基于图形界面的特定系统定制平台的研究上,与Windows操作系统相比还存在差距。因此,要使嵌入式Linux在嵌入式操作系统领域中的优势更加明显,整体集成开发环境还有待提高和完善。