前言
VxWorks是较为常用的嵌入式硬实时操作系统,在很多领域都有其应用的身影,然而由于VxWorks操作系统源代码不公开,虽然文档中对各种驱动设计都有说明,但在实际应用中还是会遇到很多问题。本书根据作者工作中的一些驱动经验,结合Wind River提供的一些官方文档和开发环境下的源代码写成,对VxWorks下各种常见设备的驱动都做了比较详细的介绍和分析,可以作为VxWorks下设备驱动设计的指南。另外,对于各种类型的VxWorks启动方式以及映像文件组成进行了较为细致的分析,将澄清VxWorks BSP开发者具有的很多疑问。本书既可作为VxWorks初学者的学习材料,也可作为VxWorks老手的参考资料。
本书内容
本书分为3篇共11章。
第1篇为VxWorks操作系统快速入门篇,共包括3章内容。
第1章简单介绍了嵌入式系统,并对VxWorks操作系统的特性进行了简单说明。
第2章对VxWorks操作系统的主要组成进行了比较详细的介绍,包括任务、任务调度、任务间通信、内存管理、中断处理。书中内容不是翻译官方的文档,而是结合作者的经验有感而发。
第3章对VxWorks内核映像类型以及启动方式进行了详细分析,并对下载方式中使用的bootrom进行了较为深入的分析和介绍,此后对VxWorks操作系统的启动过程进行了梳理。本章将澄清读者对VxWorks启动方面的很多疑问。
第2篇为VxWorks设备驱动起步篇,共包括2章内容。
第4章讨论了驱动程序的基本功能和结构,对驱动程序中常用的一些策略以及注意事项进行了介绍。
第5章介绍了VxWorks设备驱动的内核结构层次,着重对I/O子系统及其维护的三张系统表进行了讨论,并对VxWorks下已有的几个较为常用的驱动以代码示例的方式介绍其使用方法。
第3篇为本书的重点,对VxWorks下六大核心设备驱动进行了详细的分析和介绍,六类驱动中每类驱动对应一章内容,故本篇共包括6章内容。
第6章开始进入具体设备驱动的设计,本章将从结构层次最简单的普通字符设备驱动开始讲起,以一个SPI接口驱动代码为例,着重讨论了普通字符设备驱动的结构、设计方式和具体实现。
第7章对串口驱动设计和实现进行了详细的分析。串口也是字符设备的一种,由于其常用性,VxWorks内核专门提供了TTY中间层来提高串口驱动设计的效率,降低串口驱动设计的复杂度。
第8章进入第二大类设备——块设备驱动的设计和实现的分析。我们将从数据结构的知识出发,分析块设备驱动的基本结构,进而讨论其具体实现。VxWorks下块设备驱动工作的方式比较特殊,其使用的阻塞读写方式不同于通用操作系统下的中断读写方式,这与VxWorks特殊的工作环境有关。
第9章将对Flash设备驱动进行详细介绍。Flash设备是嵌入式平台上最常见和常用的设备,用以存储操作系统内核映像和用户数据。本章将对VxWorks内核提供的TrueFFS中间层进行展开,分析Flash设备驱动涉及的各个方面。
第10章进入第三大类设备——网络设备驱动的设计和实现。网络设备由于其独特的工作方式,其内核驱动层次不同于其他两类设备(字符设备、块设备),其不属于I/O子系统管理,而是直接工作在内核网络栈的实现下。为了简化网络设备驱动设计的复杂度,VxWorks提供了MUX中间层,在该层次下实现的驱动通常被称为增强型网络驱动。本章同样也是从数据结构的知识出发,以实际项目中使用的网口驱动代码为例,逐步完成对网络设备驱动的设计和实现。
第11章分析了USB设备驱动的设计和实现。首先对USB本身进行了详细的介绍,之后对要驱动的对象进行了澄清。一般而言,USB设备驱动指的是对USB主机或者目标机控制器的驱动,这个驱动由于与内核USB栈耦合较紧密,故必须对内核USB栈的实现有很清楚的了解才能成功地完成USB主机控制器的驱动开发。本章首先跟随一个USB类驱动层读数据请求,对请求在内核USB栈中的传递路径进行了跟踪,对路径上调用的关键函数以及使用的数据结构进行了较为详细的分析和介绍,之后以Mass Storage类驱动为例,介绍类驱动的初始化过程,并以UHCI控制器驱动为例,介绍主机控制器驱动的初始化过程,最后总结出了USB主机控制器的驱动结构,给出了驱动中两个中心函数的实现框架。
致谢
我要感谢我尊敬的慈祥的奶奶,您的勤劳善良将影响我的一生,是您教导我“自成人,方成人”,告诫我要严于律己。同时,我要感谢我的父母,你们鬓角的丝丝白发,早已印入我的心中,成为我奋斗不止的动力。
本书参与编写的人员有:曹桂平、张勇、王丽娜、周毅、林小峰、刘刚、马海波、李强、吴慧、马玉刚、冯浩、唐爱琴、李子龙、王明明、蒋志,全书由华清远见嵌入式培训中心审校。
鉴于作者能力有限,不可能对VxWorks下各类驱动中的每一个问题都理解到位,如果发现理解或者分析有误之处,恳请广大读者批评、指正,读者也可通过邮件(邮箱地址为ingdxdy@gmail.com)与作者联系。
曹桂平