关注自由和开源软件
为什么关注"自由和开源软件"?使用自由和开源软件 (FOSS)群体的迅速扩增,从1980年以来,体现了嵌入式行业最重要的全面长期发展趋势。第一,获得 FOSS软件许可,就可以使用源代码,同时还赋予开发人员研究、变更、改进软件设计的权利。第二,在每一类主要软件的生命周期中,FOSS已经或者必将发挥一定的作用,影响从64位服务器到8位微控制器的一切平台。FOSS将从根本上改变所有用户和开发人员对于软件价值主张的看法。因此,大部分嵌入式开发人员或早或晚都会在设计中使用FOSS。
什么是FOSS
"自由软件"与"开源软件"的主要区别在于其内含的自由概念不同。"自由软件"许可尊重最终用户的几项基本自由:运行软件的自由;研究和更改软件的自由;再分发副本的自由;改进程序和发布这些改进的自由可以自由地做这些事情,意味着您不必征求许可或者支付费用获得许可,这是一个关于自由的问题,而非商业问题,因此应理解为"言论自由,而不是免费啤酒"。
另外还应注意,这些自由是针对"最终用户"而言,而不是开发人员,也不是软件分发者。
另一方面,"开源软件"并非始终赋予最终用户同样的自由,但它赋予"开发人员"访问源代码等权利。4种开源许可都允许开发人员创建专有闭源软件,而不要求分发最终成果的源代码。BSD(伯克利软件发行)许可就是其中一例,它允许以二进制形式再分发软件,无需提供源代码。
在现实世界中,闭源或专有软件与FOSS主要区别在于大众协作开发的性质不同,前者大家都独立开发各自的项目,而后者任何用户都可能成为开发人员,报告并修正缺陷,或者增加新特性。
FOSS受到嵌入式市场欢迎的原因很简单,主要是经济利益驱动,它能降低软件成本,加快产品上市。FOSS将"自主开发"的开发人员变为系统集成者,使其能专注于产品增值和与众不同的特性,而不是一次次重复产生相同的基本结构和功能。这是控制软件开发成本的唯一行之有效的方法。无论何种组织机构,总会处于采用开源软件五个阶段中的某一阶段。
表1:采用FOSS的五个阶段
虽然许多人将FOSS等同于著名的Linux®内核或者基于Linux的发行版,但在嵌入式开发中,超出Linux范围使用FOSS已经非常普遍;几乎四分之三的组织都在使用它,涉及到成千上万个项目。然而,随着基于Linux的嵌入式系统越来越受欢迎,为嵌入式外设(ADC、DAC、音频编解码器、加速度计、触摸屏控制器等)提供Linux驱动程序的需求变得日益迫切。
ADI公司创建、修改和维护的驱动程序的各层:
•在何处进行维护(驱动程序的下载位置)
•接口代码(用于内核的公共代码)--允许在您的平台上使用驱动程序
•驱动程序开发惯例(哪些文件可以修改或提供,哪些不能)
•何处可以找到代码--如何提交缺陷和问题报告
Linux设备驱动程序
多数Linux用户都乐于不知道Linux内核所涉及的底层硬件复杂性和问题,往往会吃惊地发现内核大部分都与运行于其上的硬件无关。事实上,Linux内核中的多数源代码都与独立于架构的设备驱动程序有关:在Linux2.6.32.6内核的全部7 934 5669行代码中,有4 758 810行代码(60%以上)都位于./drivers,./sound和./firmware目录下,比例之高令人震惊。与架构有关的代码只占Linux内核的很小一部分,全部22种不同架构仅有1 501 545行代码(18.9%)。Linux内核支持的前10大架构如表2所示。
表2:Linux内核支持的前10大架构
这说明,与架构无关约占内核源代码的60%的驱动程序具有举足轻重的作用。对于每种支持Linux的硬件,都有人编写过设备驱动程序。自2007年以来,ADI公司一直位列为Linux内核10贡献代码最多的20家公司之一,并设立了专职团队从事Linux设备驱动程序的开发。
Linux设备驱动程序的基本知识
设备驱动程序用作硬件与使用硬件的应用程序(用户代码)或内核之间的转译器,它将硬件的工作细节隐藏于幕后,从而起到简化编程的作用。编程人员可以利用一套标准化调用方法(系统调用)编写高级应用程序代码,而不必关心它将控制的特定硬件或运行于其上的处理器。借助定义明确的内部应用程序编程接口(内核API),应用程序代码便可以通过与软件上层结构或底层硬件无关的标准方式与设备驱动程序实现接口。
针对特定处理器平台,操作系统(OS)处理硬件操作的细节。利用内核(OS)内部硬件抽象层(HAL)和处理器专用外设驱动程序(例如I2C®SPI总线驱动程序),通常的设备驱动程序甚至也能独立处理器平台。这种方法允许一个设备驱动程序(例如触摸屏数字化仪AD7879的驱动程序)可以不加修改地用在任何运行Linux的处理器平台上,Linux
- 基于开源软件的嵌入式网络打印服务器(11-05)
- GCC-维基百科(04-13)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)