首页 | 最新需求 | 最新现货 | IC库存 | 供应商 | IC英文资料库 | IC中文资料库 | IC价格 | 电路图 | 应用资料 | 技术资料
 电路图:    3万份资料
您现在的位置:首页 >  电路图 芯片中文资料列表  
 
 
介绍:
关注自由和开源软件(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内核之上运行任何图形用户界面(GUI)包和适当的应用程序。如果硬件设计人员决定转而 使用触摸屏控制器AD7877,他(她)将无需软件团队提供信息。两款器件均可用驱动程序;虽然器件不同,连接方式可能不同(AD7877仅提供 SPI,AD7879则有SPI或I2C),并且寄存器图也不相同,但相对于触摸屏用户代码的内核API完全相同。这样,对硬件的控制权便又回到硬件架构 师手中。

Linux内核中的不同类型设备驱动程序提供不同的抽象层次,传统上一般将其分为以下三类。

字符设备:处理字节流。串行端口或输入设备驱动程序(键盘、鼠标、触摸屏、游戏操纵杆等)通常实现字符设备类型。

块数据设备:单次操作处理512字节或更多的二次幂块数据。存储设备驱动程序通常实现此类块设备。

网络接口:任何网络事务都通过接口完成,接口指能够与其他主机交换数据的设备。

在Linux内核中,各特殊类别都可能有多个独立的设备核心层,以帮助开发人员实现提供标准用途的驱动程序,如视频、音频、网络、输入设备或背 光处理等。通常,每个子系统在Linux内核源代码树中都有其自己的目录。这种“设备驱动程序核心方法”消除了特定类别所有设备驱动程序的公共代码,为上 层构建了一个标准接口。每类设备或总线设备核心驱动程序通常会将一个函数集导出至其子类。驱动程序利用这种核心驱动程序注册,并使用核心驱动程序所导出的 API,而不是注册其自己的字符/块/网络驱动程序。这通常包括支持和处理多个实例以及在层间分配数据的方式。绝大部分系统无意了解设备如何连接,但需要 知道何种设备可用。Linux设备模型也包括一种将设备指派给特定类别的机制,如input(输入)、RTC(实时时钟)、net(网络)或GPIO(通 用输入/输出)等。这些类名在更高的功能层次描述设备,使之能在用户空间中被发现。

特定硬件可能有多个设备驱动程序子系统与之相关。多功能芯片,例如带I/O扩展器的背光驱动器ADP5520,会同时利用Linux背光、LED、GPIO和输入子系统来实现其键盘功能。

如前文所述,用户应用程序不能直接与硬件通信,因为那将要求拥有对处理器的管理员权限,例如执行特殊指令或处理中断。使用特定硬件设备的应用程序通常在通过/dev目录中的节点暴露的内核驱动程序上工作。

设备节点称为伪文件,因为它们看起来像文件;应用程序也可以打开或关闭它们(open()或close()),但在读取或写入这些文件时,数据 来自或传递至设备节点相关的驱动程序。这个抽象层次由Linux内核中的虚拟文件系统(VFS)处理。除了read()、write()或poll() 外,用户应用程序也可以利用ioctl()(输入/输出控制)与设备交互。

除设备节点外,应用程序也可以利用/sys目录中的文件条目;这是一个sysfs虚拟文件系统,可将有关设备和驱动程序的信息,包括父子关系或 与特定类、总线的关联,从内核设备模型导出至用户空间。/sys也频繁用于设备配置,特别是当相关驱动程序以一个设备驱动程序核心注册时,此时它只将其标 准功能集导出给用户。

设备驱动程序可以注册/sys“钩子”或“条目”;读取或写入钩子或条目时,将执行设备驱动程序专门注册的回调函数。这些回调函数(在管理员模 式下运行)可以接受参数、发起总线传输、调用某种处理、修改特定设备变量,并将整数值或字符串返回给用户。这就为实现其他功能创造了条件;例如,用户空间 可以使用触摸屏数字化仪AD7877的温度传感器或辅助ADC。

设备驱动程序既可以静态地构建于内核中,也可以在以后作为可加载模块动态安装。Linux内核模块(LKM)是动态组件,可以在运行时插入和移 除。这对于驱动程序开发人员特别有用,因为更快的编译速度可以节省时间,而且测试模块不必重启系统。让硬件驱动程序驻留在可以随时载入内核的模块中,便可 以在特定硬件不用时节约RAM。

加载模块时,也可以赋予其配置参数。对于构建于内核中的模块,参数在内核启动时传送给该模块。例如:

root:~> insmod ./sample_module.ko argument=1

root:~> lsmod

Module Size Used by

sample_module 1396 0 - Live 0x00653000

root:~> rmmod sample_module

驱动程序也可以多次实例化,每次实例化都可以采用不同的设置,目标设备可以有不同的I2C从ID,连接到不同的SPI从选择,或者映射到不同的物理存储器地址。所有实例共用同样的代码,以便节省存储器,但具有各自的数据段。

Linux是一种先占式多任务、多用户操作系统,因此几乎所有设备驱动程序和内核子系统都允许多个进程(可能由不同的用户所有)同时利用设备。 常见的例子有network(网络)、audio(音频)或input(输入)接口。QWERTY键盘控制器ADP5588的键按下或释放事件会被加上时 间戳、排队并发送至所有已打开input vent device(输入事件设备)的进程。这些事件代码在所有架构上都相同,并且与硬件无关。读USB键盘与从用户空间读取ADP5588并无区别。事件类型 通过代码加以区分。键盘发送键事件(EV_KEY)、键识别码以及代表按下或释放动作的某种状态值。触摸屏发送绝对坐标事件(EV_ABS)以及由x、y 和触摸压力组成的一个三元组,鼠标则发送相对运动事件(EV_REL)。加速度计ADXL346在发送关于加速度的绝对坐标事件的同时,可以发送关于单振 或双振的键事件。

某些应用中,加速度计ADXL346产生相对事件或者

 
 

更多 110
关于我们 | 联系我们 | IC列表库索引1 | IC列表库索引2 | IC列表库索引3 | IC列表库索引4 |
深  圳13410210660             QQ : 84325569   点击这里与集成电路资料查询网联系
联系方式: E-mail:CaiZH01@163.com