嵌入式Linux作为智能手机操作系统的关键问题(ARM技术)
目前,Linux转向嵌入式系统领域已经成为一种趋势。因为Linux是开发源代码的操作系统,开发者可以针对自己的需要对其任意改动,而且Linux阵营还有许多免费的系统软件和应用软件都是开放源代码的。而作为智能手机操作系统,则对Linux的改进提出了自己的问题,主要需要进行四个方面的改进,即电源节能管理、快速启动、实时性以及系统尺寸。
电源节能管理目前采用的技术即动态电源管理(DPM)。传统的计算机系统的电源管理把精力集中在管理像是睡眠和挂起这样的静态的模式的电能消耗, 这些都是非激活(de-activating)状态,通常需要用户采取行动来使系统再激活。 通常在进入和离开这些状态的时候有很大的延迟和开销, 典型的在桌面和服务器系统中有一个固件层(firmware layer)来支持这些模式。动态电源管理则是当程序在运行时考虑执行电源管理的策略。许多体系提供halt指令来降低空闲期间的CPU功率。操作系统和驱动程序也可能管理外围设备的功耗, 举例来说在硬盘处于不活动的期间降低其转速。 带有外围设备的高度地整合的处理器一般具有软件控制的时钟管理能力来使外围设备及其控制器不激活来减少电能的消耗。 内存子系统也为动态电源管理提供一有实用价值的办法,如通过内存控制器或者基于软件的方案来实现。
以上都是从硬件的角度来进行动态电源管理,而硬件最终还需要软件的支持来使用。例如在智能手机中,LCD屏幕的开启与关闭,在没有使用时降低甚至关闭应用CPU的运转等都需要软件来控制。所以软件的实现也是很有研究的一个课题。在一般的动态电源管理方案中,分为三个层次,第一层是Linux内核层加入DPM模块和驱动程序的优化,DPM模块进行整个DPM的调度和管理,驱动程序则接收DPM的命令进行相应的硬件控制。第二层是策略层,这层负责策略管理,选择最佳的时机进行管理,例如当用户不使用手机多少时间以后关闭LCD。最后一层是应用层,这层主要是对应用程序进行DPM优化以达到尽可能小的减少功耗。
快速启动是智能手机要解决的关键问题。Linux是一个单内核的系统,启动起来比较慢,而再加上智能手机必不可少的图形系统启动更慢,显然让用户长时间等待是不现实的。系统快速启动的方法有很多,其中就地执行(XIP)是最基本的方法,Linux内核其中之前一般由装载程序从flash装入RAM,而且一般在flash中是以压缩的形式存储的。使用XIP技术可以让内核直接从flash中运行,就不需要拷贝和解压缩。当然这带来的问题是内核不能压缩,而且flash必须支持线性编址,不过这些都不是问题。第二个途径是优化子系统的初实化,实际上手机在大部分时间处于待机状态,开始时最可能使用的功能也非常少,那么就可以选择让一些子系统延后到手机不使用进行,内核一些模块可以在需要时在装载,而一些必要的模块必须理解初实化,例如图形界面,至少打电话的功能界面要立即可以使用。所有这些可以达到让用户感觉瞬时启动的感觉(1秒左右)。
系统尺寸是指包括系统的静态尺寸,即在flash中影像所使用的空间,和系统运行时的尺寸。这方面的工作主要从软件的角度来进行,如整个内存分布的协调和优化,各种库文件如Libc的最小化等。Linux是一个通用的系统,所以对于智能手机来说,有些功能就不需要了,比如如何要使用Ethernet,就可以提供一个简化版本的TCP/IP协议栈以减少模块体积和运行开销。
实时性在智能手机上并不是非常重要,但软实时也是必要的。比如电话通信模块,当有电话呼入时显然必须立即处理,这就需要具有优先级的可抢占的任务调度机制。而Linux本身不是抢占式的内核,这是实时性的基本要求。还有其它可以改进的地方,例如高分编率定时器,Linux内核缺乏提供的高精度的时钟,依赖系统低精度的时钟无法分辨高精度的实时任务的到来,通过内核支持高精度的时钟来实现对于实时任务的精确控制。还有同步(FUTEX, - fast user space Mutex)、内核延迟和中断响应等对实时性进行优化的方案。当然实时性还需要进行大量的研究,要达到专门的RTOS的性能还需要一段时间。
综上所述,智能手机项目组的OS级的支撑需要进行许多的艰苦的研究,虽然业界尤其是Montavista已经在嵌入式Linux,包括在消费电子的应用上做了许多研究并取得了不多的效果,但它们并不是开放的,需要支付昂贵的使用费,因此我们必须自己研究这些问题,形成具有自主知识产权的技术。当然,这些问题的解决还需要其它模块的配合,例如图形系统的优化,因为无论是动态电源管理还是快速启动都需要和图形系统打交道,它们必须互相配合才能发挥出作用。