首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

你必须了解的嵌入式Linux特性

你必须了解的嵌入式Linux特性

如今,Linux正广泛应用于各种嵌入式设备的开发中,如数字电视、视讯转换盒、DVR播放器、xDSL/有线/PON调制解调器、家用路由器和网络网关。它尤其适合具有先进网络功能、大量设备驱动程序的数字家庭和家庭网络。除了嵌入式设备,Linux还支持企业级设备,如服务器和路由器。
此外,Linux在行动设备中也获得了青睐。市调机构In-Stat的报告显示,到2012年,中国基于行动Linux的智能手机出货量将达到中国智能手机总出货量的25.4%。
相较其它典型的专有商用OS,Linux蓬勃发展的原因在于其是开原始码、成本低、使用快速安全。与其它OS相较,它能够更好地进行‘剪裁’,且只占用较小空间。利用Linux,再加上来自开放原始码社群的持续支持,工程师能够使用和控制原始程序代码。开放原始码社群是由熟悉Linux的工程师组成的大型社群。
不断改进的Linux核心
然 而,在面对特定嵌入式应用时,Linux仍存在许多挑战,如内存空间有限,或是需要实时确定性以及高安全性能的应用。而工具链的改善、新的除错工具和性 能、不断演变的标准化努力等,都继续提升Linux对于所有嵌入式应用的价值。在这其中,Linux核心的不断改进异常重要。
Linux 核心是应用软件采用的标准Linux API和处理器系统(应用软件执行其上)底层硬件结构之间的接口。该核心是内部组件和外部可加载模块的复杂组合,为应用程序的执行提供全面和稳定的处理环 境,提供安全消除软件缺陷、在某种程度上防止硬件故障的能力。在开机循环期间,核心必须及时发现,并正确初始化核心系统处理器、系统内存、硬件驱动、视频卡、USB端口、网络卡和音讯处理器,而且要在开机循环期间提供是否成功的足够指示。
维持如此复杂的程序代码收集很明显是一个 严峻的挑战。核心原始程序代码被划分为标准‘树’结构,这样子系统就能够更好地彼此隔离,有助于实现几个关键核心维护工作的分布。这种分工可大幅减少核心某 一部份产生重大变化对其他部份产生的影响。每个后续子系统的变更都将传达给主要维护者,最终到达Linux核心最上游的维护者。这些变更通常称为‘外挂程 式’,在标准格式下制作和应用。
供货商和开发人员将他们的知识反馈到开放原始码社群以改进核心。Linux开放、分散的本 质,再加上背后强大的社群支持,使基于Linux的OS成为培养创新的良好选择。由于供货商和开发人员不断分享他们所学到的知识,因此存在这样的可能:当开发人员需要实现某种功能时,可以在Linux社群生态系统中找到并予以采用。
商用Linux供货商做了很多工作使Linux成为嵌入式应用中更加可行和吸引人的操作系统。
商用vs.开放原代码
当选择Linux OS时,嵌入式Linux开发人员有两个主要选择:‘免费’版本,开发人员可以下载有开放原代码授权的对象/原始程序代码;商业发行版,由不同公司维护和支持的商用产品。
目前,大多数开发人员使用的都是免费发行版。市场研究公司VDC一份针对目前Linux使用者的2007年调查中有这样一个问题:请问您将在下一个项目中使用哪种Linux OS?结果高达71%的嵌入式系统工程师表示,愿意采用免费发行的Linux版本。

图1:为下一个项目计划的Linux操作系统。资料来源:VDC/2007
由 于众多嵌入式开发人员将在下一个设计项目中选择Linux,因此,让他们体认到免费发行版本固有的局限性非常重要。这些局限包括:缺乏丰富的Linux工 具;相较竞争的实时OS来说占用更多空间;为满足实时要求最佳化Linux所面临的挑战;支持以及开发工具有限。也就是说,‘免费’意味着不花钱使用,但 并非零成本。
‘免费’≠‘零’成本
除了决定使用商用或免费Linux版本,开发 人员还必须认识到其除错/开发工具的能力和局限。嵌入式SoC领域任何有意义的设计,都要求针对嵌入式领域的高度整合的软件开发工具。从编译器到应用各个 环节的开放原始码工具,都期望能创造良好的生产品质。开发人员期望这些工具能与更短的学习曲线无缝结合。
充分发挥嵌入式 Linux免费发行版的优势,已经成为消费产品领域被广泛接收的现实。在这些市场上,产品执行率非常高,对程序代码的增加非常频繁,而且产品的销售成本至关 重要,所有这些都使得开放原始码模式极具吸引力。但是,人们通常希望开放原始码工具能够与生产品质密切相关,‘免费’和‘商用’并不同义。必须对核心和 SoC组件互动有深刻的了解,才能整合开放原始码/免费软件,并为处理器核心提供无缝除错环境的工具。因此,需要专业知识才能使目前的开放原始码工具顺利 工作。
现在有若干种‘免费软件’除错解决方案,设计人员必须全面了解其局限性。例如,针对Linux核心最受欢迎的免费软件除错器是KGDB,但主要缺点是 KGDB会要求重新编译核心。这对产品已经部署到现场的应用来说并不可行。修补核心还可能导入影响系统性能的程序代码变化。
GDBServer 是另一个针对应用除错的颇受欢迎的免费软件除错器,但它也受到了严格限制。主要问题是缺乏对同时除错大量执行绪/进程的支持。随着除错的执行绪/进程数不 断增加,GDBServer性能迅速恶化,导致响应时间太慢,进而使目标系统出现故障。其它问题还涉及到:不能在相同的目标连接上除错驱动程序和应用;除 错设备驱动程序和除错共享库。了解特定应用的除错需求非常重要,应据此选择相应工具。
Linux核心的维护
在决定将选择哪种OS时,开发人员的重点是选择一个完全支持其特定处理器的操作系统,并能降低总成本和缩短上市时间。这意味着大部份核心维护已经完成,因此 若他们遇到什么问题或挑战,处理器供货商及其生态系统支持业者就能帮助解决这些问题。此外,利用供货商已正式测试的核心版本,客户在设计过程中即使不能完 全消除,也可以不断降低风险。特定处理器Linux生态系统可以利用一套标准配置和测试平台,快速而准确地隔离客户应用中的差异。
从处理器供货商的角度来看,积极参与与其核心相关的Linux核心的维护非常重要。这些供货商最有能力实现额外的新功能,以及增加原有核心功能的稳定性,因为他们了解这些核心设计中的所有‘秘密’细节。
以 MIPS为例,作为处理器IP公司,MIPS必须确保其新的处理器核心完全整合在Linux原始程序代码树,且所有的变更都透过对旧核心和平台的回归测试进 行正确验证。MIPS的核心维护人员必须‘签署’(核准)每个建议的‘外挂程序’。这些外挂程序由MIPS及其客户提交,可强化核心功能,并改善对现有核 心的支持和偶尔的错误修复。
对于像MIPS这样的IP核心供货商和Linux社群来说,最有益的方式是确保其核心的所有性能 和电源管理特性能够在Linux核心中完全实现,以便为采用Linux作为设计核心OS的使用者最佳化使用者体验,并让数以百计的Linux核心编程人员 进行核心增强的同行审查。
为了实现最佳单位面积运算能力(MIPS/每平方毫米)和最佳单位功耗运算能力(MIPS /mW),许多处理器都利用了多核心技术,在几个以较低时脉频率执行的核心间分配处理负载。这些应用能够以对称多处理(SMP)的方式进行分配,其中一项 任务是核心间的基本平分;或者采用非对称多处理(AMP),在这里特定任务被分配给一个特定核心。不论是哪种方式,Linux核心中必须有适当的支持允许 实现这些编程模型,同时对应用开发者尽可能的透明。
另一个重要的Linux核心最佳化例子是电源管理。在今天的绿色运算环境 中,电源管理日渐重要,不仅展现在要求大幅延长电池寿命的可携式设备方面,而且展现在需要尽量减少能源浪费和热量的AC供电系统中。目前一个典型的手机必 须管理20多个不同的电源层,还不包括应用处理器SoC内和核心本身的电压岛。
目前Linux核心电源管理支持主要集中在通过ACPI的标准PC。但是ACPI接口并不适合先进的多核心SoC,因为后者必须将一致性电源管理方案扩展至多个核心、内部SoC外围设备以及最后的外部系统外围设备(如RF功率放大器)。
在 MIPS,我们执行了一个先进的电源管理IP模块,称为丛集电源控制器(CPC),在具体的1004K执行中,它允许对每个核心的单独控制,使核心可以进 入或离开一致性作业,并在需要的情况下彻底关掉电源。这样的电源管理模式能够进一步扩展,使核心电压和频率调变处于操作系统本身的控制之下。这个CPC模 组的功能还必须扩展至Linux核心。

图2:丛集电源控制器允许在特定的多核心架构中对每个核心进行单独控制
Linux开发工具
当考虑处理器对OS的支持时,开发工具很重要。最新一代Linux开发工具利用了芯片级仪器(On-Chip Instrumentation)对除错器进行‘硬件协助’。这些工具都是特定架构的,并非所有处理器都支持这种独特的除错方法。例如,目前有的 Linux工具可以剖析Linux核心及加载模块。这些工具依赖于:处理器能够以极高的速度对PC缓存器进行透明采样,并将这些信息传送到除错器。加上来 自加载模块的符号信息(Linux设备驱动程序的典型形式),开发者能够迅速剖析Linux核心,并确定设备驱动程序可能会将什么要求放在核心上。最佳化 Linux核心性能可能对系统的性能产生巨大的影响。
返回列表