2008年10月8日星期三

Linux设备驱动程序设计之前需要考虑

由于嵌入式系统整体来看,除了软件开发外,也包含硬件客制化,因此驱动程序在嵌入式系统技术领域中,占了举足轻重的地位。学习驱动程序需要确实了解硬件的 规格与微处理器架构,并且工程师还要能分得清楚哪些东西是接口(interfacing),也就是与硬件无关的程序(machine- independent);以及哪些是站在第一线做硬件控制的程序(machine-dependent)。各种软件硬接口与汇流排也都要精通。

了解Linux驱动程序的架构,是进入嵌入式Linux领域的重点功课,因为许多针对ARM9平台的驱动程序都是参考框架、或是针对特定开发板的实作,因此必须了解Linux驱动程序的架构,并进行修改,以符合自己的开发板与外围规格。

Linux驱动程序,采取严谨的分层式架构设计(layered architecture),利用分层的架构设计来彻底区分generic device driver(machine independent)与machine dependent driver。

Linux驱动程序透过注册与回呼的机制来清楚区分每1层的关系。分层架构的实作必须在下层将自己注册给上层,上层再回呼下层;上层的驱动程序必须提供注册函数供下层呼叫,下层驱动程序所使用的注册函数也将决定自己的上层架构。

与user application如何互动,是撰写驱动程序时所要考虑的重要一环,因此撰写驱动程序时,要提供什么功能给应用程序引用,就必须事先定义清楚。 Linux的 generic device driver层已经帮我们把这些功能定义清楚了。Linux驱动程序如何透过I/O port或I/O memory来控制装置,也就是与芯片组的沟通,方式是使用Linux kernel所提供的I/O函数来存取并控制实体硬件装置。

Linux驱动程序的装置文件

Device files是UNIX系统的独特观念,在UNIX系统底下我们把外部的周边装置均视为1个档案,并透过此档案与实体硬件沟通,这样的档案就叫做device files或special files。

Device file的major number代表1个特定的装置,例如major number 1为”null”虚拟装置,major number定义于kernel文件目录Documentation/devices.txt。Minor number代表装置上的子装置,例如同1个硬盘上的分割区就用不同的major number来代表,但其major number相同。

我们在设计device driver时,会先透过1个“注册”(register)的动作,将自己注册到kernel里,注册时,我们会指定1个major number参数,以指定此驱动程序所要实作的外围装置。当user开启device file时,kernel便会根据device file的 major number找到对应的驱动程序响应使用者。Minor number则是device driver内部所使用,kernel并不会处理不同的minor number。

Linux 2.6的kobject模型

Linux 2.6在驱动程序的架构方面,加入kobject的概念。kobject以更有系统、组织的方式维护系统里的driver(集中式管理),但并非改变现有 (kernel 2.4以来)的driver架构。在kobject的模型下,可以看到1个platform driver观念。所谓「platform driver」就是machine- dependent driver,当驱动程序设计师在kernel 2.6底下实作machine-dependent driver时,就要以platform driver的架构来实作。例如,针对我们的目标装置进行硬件层的驱动程序撰写时,就要以platform driver的方式来撰写,实作上,只是多1个注册到platform driver层的动作而已。

Flash装置的支持

针对嵌入式系统经常使用的闪存(Flash)储存装置,Linux kernel支持JFFS2与NFTL 2个专门针对快闪记亿体设计的档案系统。JFFS2(Journaling Flash File System version 2)是专门针对 NOR 型闪存所设计的档案系统。NFTL(NAND Flash Translation Layer)则是专门针对NAND型闪存设计的档案系统。

结论

综合而言,Embedded Linux是1个平台、也是一些工具的集合、也是1个嵌入式软件的开发环境;实作上,Embedded Linux除了会进行kernel的修改、驱动程序的移植或开发外,也会是系统管理与系统整合的再应用,这是一门集大成的技术,并不只是1个嵌入式操作系 统,也不只是1套开发工具。

没有评论: