专家解读嵌入式Linux特性
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核心性能可能对系统的性能产生巨大的影响。
备受称赞的核心评测工具是Linux事件分析器,能够剖析整个系统。通常这些工具可撷取目标内产生的使用者选择的Linux事件,然后根据时间透过图形显示这些事件。这些撷取有时能够
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)
- Linux标准趋向统一(11-12)
- linux基础技术(02-09)
- LINUX的目录树(02-09)
- 在Windows下启动Linux(02-09)