你需要了解的嵌入式Linux
0赞今天,Linux 正广泛应用于各种嵌入式设备的开发中,如数字电视、机顶盒、DVR播放器、xDSL/有线/PON调制解调器、家用路由器和网关。它尤其适合具有先进网络功能、大量设备驱动程序和免版税运行时间的数字家庭和家庭网络。除了嵌入式设备,Linux 还支持企业级设备,如服务器和路由器。
Linux在移动设备中也获得了青睐。In-Stat的报告显示,移动Linux将牢牢抓住中国巨大的市场占有率。该机构认为,到2012年,中国基于移动Linux的智能手机总发货量将达到中国智能手机总出货量的25.4%。
不断改进的Linux内核
Linux当面对特定的嵌入式应用时仍存在很多挑战,包括那些内存空间小或实时确定性以及安全性能要求高的应用。工具链的改进、新的调试工具和性能、不断为标准化演变的努力等,都将继续提升Linux对于所有嵌入式应用的价值。在这其中,Linux内核的不断改进异常重要。
Linux内核是应用软件采用的标准Linux API和处理器系统(应用软件运行其上)底层硬件结构之间的接口。该内核是内部元件和外部可加载模块的复杂组合。在开机启动期间,内核必须及时发现,并正确布置核心系统处理器、系统存储器、硬盘、视频卡、USB端口、网卡和音频处理器,而且要在开机启动期间提供足够的显示表明成功与否。
维持如此复杂的代码收集很明显是一个严峻的挑战。内核源代码被划分为标准“树”结构,这样子系统就能够更好地彼此隔离,有助于实现几个关键内核维护工作的分布。这种分工可以最大限度地减少内核某一部分发生重大变化对其他部分产生的影响。每个后续子系统的改变传达给主要管理员,最终到达Linux内核最上游的管理员。这些变化被称为“修补(patch)”,在标准格式下创建和应用。
供应商和开发人员将他们的知识反馈到开源社群以改进内核。Linux开放、分散的本质,再加上背后强大的社群支持,使基于Linux的OS成为培养创新的良好选择。
F1:为下一个项目计划的Linux操作系统。资料来源:VDC,2007 年
“免费”使用,但并非“零”成本
除了决定使用商用还是免费发行版Linux,开发人员还必须认识到其调试/开发工具的能力和局限。
充分发挥嵌入式Linux免费发行版的优势,已经成为消费产品领域被广泛接收的现实。在这些市场上,产品运行率非常高,对代码的改善更新非常频繁,而且产品的销售成本至关重要,所有这些都使得开源模式极具吸引力。但是,能集成开源/免费软件,还可为处理器内核提供无缝调试环境的工具要求对内核和SoC元件互动有深刻的了解。
现在有若干种“免费软件”调试解决方案,设计人员需要全面了解其局限性。比如,针对Linux内核最常用免费软件调试器是KGDB。KGDB的主要缺点是要求重新编译内核。这对那些已经在市场上通用的产品应用来说产并不总是可行的。修补内核还可能引入影响系统性能的代码变化。
GDBServer是另一个面向应用调试的颇受欢迎的免费软件调试器,但它主要问题是缺乏对同时调试大量线程/进程的支持。随着调试的线程/进程数不断增加,GDBServer性能迅速恶化,导致反应时间太慢,进而使目标系统出现故障。其他问题还涉及到:不能在相同的目标连接上调试驱动程序和应用;调试设备驱动程序和调试共享库。
Linux内核的维护
开发人员在决定将选择哪种OS时,重要的是选择一个完全支持其特定处理器的操作系统,并能够降低总成本和缩短上市时间。
从处理器供应商的角度来看,积极参与与其内核相关的Linux内核的维护非常重要。
作为处理器 IP 公司,MIPS科技公司必须确保其新的处理器内核正确集成到Linux源代码树,而且所有的改变都通过对旧内核和平台的回归测试进行正确验证。
由于MIPS IP内核是专有内核,对于MIPS和Linux社区来说最有益的,是确保MIPS内核的所有性能和电源管理特性能够在Linux内核中完全实现。
对新内核设计的支持不能破坏现有内核支持结构或降低其性能,而且还必须允许现有客户快速转移到新内核技术。MIPS内核的可配置性使得对Linux内核代码库的维护更富挑战,因为许多内核配置组合必须经过测试,以确保新增加的功能在所有组合中操作正常。
内核优化1:多核支持
现在,为了实现最佳单位面积计算能力(MIPS/每平方毫米)和最佳单位功耗计算能力(MIPS/mW),许多处理器都利用了多核技术,在几个以较低时钟频率运行的内核间分配处理负载。这些应用能够以对称多处理(SMP)的方式进行分配,其中一项任务是内核间的基本平分;或者采用非对称多处理(AMP),在这里特定任务被分配给一个特定内核。不论是哪种方式,Linux内核中必须有适当的支持允许实现这些编程模型,同时对应用开发者尽可能的透明。
MIPS科技的多线程34K内核和多线程/多处理1004K内核所要求的方式,与内核内的多核管理方法略微不同,因为34K内核能够在单一内核的物理实例中提供多个虚拟内核或虚拟处理单元(VPE),而1004K内核则可提供多核器件的一致执行。
对于每个内核,我们执行的Linux内核多核支持和优化都必须能够正确识别所使用的内核,并妥善初始化和无缝实现特定的多核功能。必须明白,执行基于34K器件的任务共享模型时,一个物理内核实际上是以多于一个虚拟内核的形式出现的,这些内核并不会自动进行一致性管理。这种多核环境在某些情况下比较适合AMP环境,如每个VPE 运行一个独立操作系统。1004K 内核真正的一致性多核设计使传统的SMP模式更具吸引力,在这里一个操作系统可以完全控制两个内核。
内核优化2:电源管理
在今天的绿色计算环境中,电源管理日渐重要,不仅体现在要求最大限度延长电池寿命的便携式设备方面,而且体现在需要尽量减少能源浪费和热量的AC 供电系统中。目前Linux内核电源管理支持主要集中在通过ACPI的标准 PC。但是ACPI 接口并不适合先进的多核SoC,因为后者必须将一致性电源管理方案扩展至多个内核、内部SoC外设以及最后的外部系统外设(如 RF 功率放大器)。
在MIPS,我们执行了一个先进的电源管理IP块,称为组群电源控制器(CPC),在具体的1004K执行中,它允许对每个内核的单独控制,使内核可以进入或离开一致性操作,并在需要的情况下彻底关掉电源。这样的电源管理模式能够进一步扩展,使内核电压和频率调制处于操作系统本身的控制之下。这个CPC块的功能还必须扩展至Linux内核。我们现在正在构建这个电源管理结构的基础,以实现针对 Linux内核本身及在标准Linux应用领域下运行的其他应用的全面API。
Linux 开发工具
当考虑处理器对OS的支持时,开发工具很重要。
备受称赞的内核评测工具是Linux事件分析器,能够剖析整个系统。通常这些工具可捕获目标内发生的用户选择的 Linux 事件,然后根据时间通过图形显示这些事件。这些捕获有时能够收集高达20秒的 Linux系统活动。
不管应用如何,开发者都应该确保他们选择的处理器架构包含一个无缝的开发环境,包括编译器、调试器、性能和剖析工具。这种性质的工具必须满足上市时间要求,并从一个嵌入式系统设计中获取最大的性能。