· 多年嵌入式人才培养及项目研发经验总结
· 数百家企业嵌入式研发岗位人才需求汇总
· 数十所嵌入式专业大学院校教学现状调研
· 侧重实践及案例分析并辅以代码加以讲解
shell是用户与内核进行交互操作的一种接口,是linux最重要的软件之一。目前最流行的shell称为bash shell,bash shell脚本编程以其简洁、高效而著称,多年来成为linux程序本书结合作者实际的开发经验,对vxworks操作系统内部的机制及其各类设备驱动的开发进行了深入的讲解和分析。全书分3篇共11章,第1篇对vxworks操作系统的主要组件如任务、任务调度、任务间通信、内存管理、中断处理进行了较为细致的分析;其后对很多vxworks开发者不甚了解的vxworks内核映像类型以及启动方式和流程进行了详细的说明和解析。第2篇是驱动开发的准备阶段,着重介绍了vxworks系统下设备驱动的内核层次结构。第3篇作为本书的重点,每章对应一类驱动,结合开发实例,详细而完整地分析了vxworks下普通字符设备驱动、串口驱动、普通块设备驱动、flash设备驱动、网络设备驱动以及usb设备驱动的设计和实现。
《vxworks设备驱动开发详解》面向广大工程技术工作者,既可作为高等院校教师和相关专业学生的教材,又可作为各类培训班的培训教程。
《Vxworks设备驱动开发详解》章节:
第1篇 vxworks操作系统快速入门篇
第1章 vxworks嵌入式操作
系统的特点与应用
1.1 嵌入式系统概述
1.1.1 嵌入式系统定义
1.1.2 嵌入式系统组成和特点
1.1.3 嵌入式系统发展趋势
1.1.4 实时操作系统
1.实时操作系统定义
2.实时操作系统的特征
3.实时操作系统的相关概念
1.2 vxworks操作系统基本特点
1.2.1 操作系统内核结构——微内核和宏内核
1.宏内核
2.微内核
1.2.2 vxworks内核——高性能的微内核设计
1.2.3 vxworks开发支持——可裁减的运行软件
1.2.4 vxworks网络支持——综合的网络工具
1.2.5 vxworks移植性支持
1.兼容posix 1003.1b标准
2.平台的选择
3.方便移植到用户硬件上
1.2.6 vxworks操作系统选件
1.3 vxworks操作系统应用范围
1.4 本章小结
第2章 vxworks操作系统的基本组件
2.1 vxworks任务
2.1.1 内核实现基本原理
2.1.2 任务操作函数
2.1.3 深入了解任务栈
2.1.4 任务名长度问题
2.1.5 正确结束任务
2.1.6 任务的钩子函数——黑客机制
2.1.7 任务小结
2.2 vxworks任务调度算法——基于优先级的抢占式调度
2.3 vxworks任务间通信策略
2.3.1 信号量
2.3.2 消息队列
2.3.3 管道
2.3.4 网络套接字socket
2.3.5 任务间通信的特殊机制:信号
2.4 vxworks内存管理——虚拟地址空间支持
2.5 vxworks中断处理——多层次的中断转移
2.5.1 vxworks下中断转移过程详解(基于arm平台)
2.5.2 中断上下文中为何不可调用可引起睡眠的函数
2.6 本章小结
第3章 vxworks操作系统启动过程详解
3.1 vxworks操作系统启动
3.1.1 vxworks基本启动方式
3.1.2 vxworks操作系统内存布局
1.非压缩形式
2.压缩形式
3.1.3 下载型启动方式概述
3.1.4 rom型启动方式概述
3.2 深入理解bootrom——下载启动方式下的“瑞士军刀”
3.2.1 bootrom的构成
3.2.2 bootrom脚本的创建
3.2.3 脚本运行过程分析
3.2.4 bootrom的重定位
3.2.5 ram中运行的bootrom代码
1.usrinit函数
2.usrroot函数
3.bootcmdloop函数
3.2.6 在bootrom中添加用户代码
3.2.7 其他注意事项及说明
3.3 深入vxworks启动过程
3.3.1 rom型映像早期启动流程详解
1.rominit函数
2.romstart函数
3.3.2 下载型映像早期启动流程详解
3.3.3 公共启动流程详解
1.usrinit函数分析
2.usrroot函数分析
3.启动用户代码
3.4 vxworks bsp文件组成
3.4.1 源文件
3.4.2 头文件
3.4.3 makefile文件
3.4.4 扩展文件
3.4.5 说明文件
3.5 本章小结
第2篇 vxworks设备驱动起步篇
第4章 设备驱动
4.1 设备驱动的功能
4.2 设备驱动的结构
4.3 设备驱动的基本特点
4.3.1 驱动代码执行环境——任务和中断上下文
4.3.2 设备基本分类
4.3.3 驱动代码安全性——参数合法性检查
4.3.4 驱动基本工作模式——轮询和中断
4.3.5 驱动与硬件数据的交互方式——dma和直接复制
4.3.6 其他注意事项——volatile关键字
4.4 本章小结
第5章 vxworks下设备驱动的内核结构层次
5.1 认识vxworks设备驱动内核基本层次
1.usb设备驱动内核层次
2.块设备驱动内核层次
3.字符设备驱动内核层次
4.网络设备驱动内核层次
5.2 vxworks内核驱动基本结构——内核三张表
5.2.1 系统设备表
5.2.2 系统驱动表
5.2.3 系统文件描述符表
5.2.4 内核三张表之间的联系
5.3 vxworks内核驱动支持——“免费的午餐”
5.3.1 管道虚拟设备驱动支持
5.3.2 虚拟内存设备驱动支持
1.虚拟内存设备创建函数
2.虚拟内存设备使用实例
5.3.3 ramdisk设备驱动支持
5.3.4 网络设备(netdrv)高层次驱动支持
1.netdrv驱动基本工作原理
2.网络设备节点的创建
3.netdrv驱动中关键参数的获取
5.4 vxworks文件系统支持
5.4.1 虚拟根文件系统vrfs
5.4.2 事务型文件系统hrfs
5.4.3 ms-dos兼容型文件系统dosfs
5.4.4 原始文件系统rawfs
5.4.5 cd-rom文件系统cdromfs
5.4.6 只读文件系统romfs
5.4.7 目标机文件系统tsfs
5.5 添加驱动到vxworks内核
1.将驱动代码编入内核映像
2.注册驱动和创建设备
5.6 本章小结
第3篇 vxworks之六大核心设备驱动
第6章 vxworks设备驱动之字符设备驱动详解
6.1 用户请求到字符设备驱动服务函数的传递
6.2 实例入门:基于spi接口的串口扩展芯片vk3224驱动实现
6.3 认识vxworks字符设备驱动基本数据结构——dev_hdr结构
6.4 注册字符设备驱动和创建字符设备节点
6.5 编写字符设备驱动底层服务函数
6.5.1 编写字符设备打开函数
6.5.2 编写字符设备读写函数
6.5.3 编写字符设备控制函数
6.5.4 编写字符设备关闭函数
6.5.5 设备驱动工作模式的选择
6.5.6 编写字符设备删除函数
6.6 删除字符设备节点和卸载字符设备驱动
6.6.1 删除字符设备节点
6.6.2 卸载字符设备驱动
6.7 本章小结
第7章 vxworks设备驱动之串口驱动详解
7.1 认识vxworks内核tty
中间层——串口驱动的基石
7.1.1 tty中间层应具备的功能
7.1.2 基于tty的串口驱动实现思想
7.1.3 tty中间层与底层串口驱动的关系
7.2 vxworks内核tty中间层初始化详解
7.2.1 ttydrv函数
7.2.2 ttydevcreate函数
7.2.3 sysserialhwinit和sysserialhwinit2函数
7.2.4 tty中间层初始化过程小结及注意事项
7.3 认识vxworks下串口驱动基本数据结构——sio_chan结构
7.3.1 内核sio_chan结构定义
7.3.2 封装sio_chan结构
7.4 vxworks串口驱动文件基本构成
7.5 vxworks串口驱动内核接口
文件sysserial.c的实现
1.sysserial.c模板文件
2.模板文件函数功能说明
3.sysserial.c文件功能小结
7.6 编写vxworks串口驱动底层服务函数
7.6.1 编写串口驱动初始化函数
7.6.2 编写串口驱动回调函数——arm926uartcallback- install
7.6.3 编写串口驱动控制函数——arm926uartioctl
7.6.4 编写串口驱动中断处理函数——arm926uartint
7.6.5 编写串口驱动启动发送函数——arm926uart- txstartup
7.6.6 编写串口驱动轮询工作模式支持函数
1.编写发送函数arm926uartpolloutput
2.编写接收函数arm926uartpollinput
7.7 再议vxworks内核tty中间层
7.8 本章小结
第8章 vxworks设备驱动之块设备驱动详解
8.1 认识vxworks块设备驱动内核基本层次
8.2 vxworks块设备驱动基石——内核文件系统支持
8.2.1 rawfs文件系统详解
1.rawfs文件系统初始化第一步:rawfsinit函数
2.rawfs文件系统初始化第二步:rawfsdevinit函数
3.rawfs文件系统使用示例
4.cbio中间层浅析
8.2.2 dosfs文件系统详解
1.dosfs初始化基本流程
2.初始化第一步:dosfslibinit函数
3.初始化第二步:dosfsdevcreate函数
4.dosfs文件系统格式化
5.dosfs文件系统初始化小结
8.3 认识vxworks块设备驱动基本数据结构——blk_dev结构
8.3.1 内核blk_dev结构定义
8.3.2 封装blk_dev结构
8.4 vxworks块设备驱动基本架构
8.4.1 块设备驱动工作的特点
8.4.2 基于cbio中间层的块设备驱动内核层次
8.4.3 块设备驱动底层函数组成
8.5 编写vxworks块设备驱动底层服务函数
8.5.1 认识ata(ide)硬盘结构
8.5.2 认识硬盘分区
8.5.3 认识cbio分区管理层
8.5.4 编写块设备驱动初始化函数
8.5.5 编写块设备驱动读设备函数atablkrd
8.5.6 编写块设备驱动写设备函数atablkwrt
8.5.7 编写块设备驱动设备控制函数ataioctl
8.5.8 编写块设备驱动设备状态查询函数atastatus
8.5.9 编写块设备驱动设备复位函数atareset
8.6 本章小结
第9章 vxworks设备驱动之flash设备驱动详解
9.1 认识flash设备
9.1.1 概述
9.1.2 flash设备硬件接口的差别
9.1.3 flash设备容量和成本
9.1.4 flash设备可靠性和耐用性
9.1.5 flash设备易用性
9.1.6 flash设备软件支持
9.2 深入nand flash设备
9.3 深入nor flash设备
9.3.1 nor flash存储器特点
9.3.2 nor flash命令集bcs / scs
9.3.3 nor flash接口访问标准
9.4 认识flash设备地址问题——驱动“陷阱”
9.5 vxworks下flash设备驱动内核层次详解——认识trueffs中间层
9.6 vxworks内核trueffs中间层初始化详解
9.7 创建和使用flash设备
9.8 认识vxworks下flash设备驱动基本架构
9.9 编写vxworks下flash设备驱动socket层服务函数
9.9.1 socket驱动层文件构成
9.9.2 socket驱动层实现示例
9.9.3 socket层实现小结
9.10 编写vxworks下flash设备驱动mtd层服务函数
9.10.1 tffsconfig.c文件——flash设备驱动初始化入口
9.10.2 tffsmtd.c文件——flash设备驱动mtd层服务函数所在地
9.10.2.1 编写flash设备识别函数
9.10.2.2 编写flash设备读函数
9.10.2.3 编写flash设备写函数
9.10.2.4 编写flash设备块擦除函数
9.10.2.5 编写flash设备地址映射函数
9.11 本章小结
第10章 vxworks设备驱动之网络设备驱动详解
10.1 vxworks下网络设备驱动内核基本层次——认识mux接口层
10.1.1 网络设备驱动的基本特点
10.1.2 网络设备驱动内核层次
10.1.3 认识mux中间层
10.2 认识vxworks网络设备驱动基本数据结构——end_obj结构
10.3 实例介绍:基于tms320d-m6446平台的emac网口驱动
10.4 定义vxworks网络设备驱动自定义结构——“信息集中地”
10.5 vxworks网络设备驱动加载与启动
10.5.1 网络设备驱动初始化基本流程
10.5.2 修改confignet.h文件
10.5.3 网络设备驱动加载函数armload的实现
10.5.4 网络设备驱动启动函数armstart的实现
10.6 vxworks网络设备驱动数据帧后台处理支持:netjobadd
10.7 编写vxworks网络设备驱动数据帧接收函数
10.7.1 编写数据帧接收“下半部分”入口函数
10.7.2 vxworks内核网络栈对数据帧的封装要求
10.7.3 网络数据帧处理和上传
10.7.4 再议网络数据帧的接收
10.8 编写vxworks网络设备驱动数据帧发送函数
10.9 编写vxworks网络设备控制函数
10.10 编写vxworks网络设备驱动查询模式支持函数
1.armpollsend函数的实现
2.armpollrcv函数的实现
10.11 编写vxworks网络设备停止和卸载函数
1.armstop函数的实现
2.armunload函数的实现
10.12 认识vxworks网络设备驱动内核支持函数
10.13 vxworks网络设备驱动实现小结
10.14 认识网络设备ip地址和mac地址
10.15 vxworks网络设备驱动对多网口的支持
10.15.1 修改底层驱动
10.15.2 修改confignet.h文件
10.15.3 修改usrnetinit函数
10.16 本章小结
第11章 vxworks设备驱动之usb设备驱动详解
11.1 usb详解
11.1.1 usb的定义
11.1.2 认识usb描述符及其相互关系
1.驱动描述符(device descriptor)
2.配置描述符(configuration descriptor)
3.接口描述符(interface descriptor)
4.端点描述符(endpoint descriptor)
11.1.3 usb控制器基本分类
11.1.4 认识usb硬件接口
11.2 认识vxworks下usb设备驱动内核层次和驱动对象
11.3 示例介绍:uhci usb主机控制器基本工作原理
11.3.1 uhci规范
11.3.2 uhci基本工作原理和数据结构
11.3.3 uhci控制器驱动原理概述
11.4 vxworks下usb设备操作请求内核传递过程详解
11.4.1 第一层入口函数:usbbulkdevblkrd
11.4.2 第二层入口函数:usbbulkcmdexecute
11.4.3 第三层入口函数:usbdtransfer
11.4.4 第四层入口函数:urbexecblock
11.4.5 第五层入口函数:usbdcoreentry
11.4.6 第六层入口函数:fnctransfer
11.4.7 第七层入口函数:usbhcdirpsubmit
11.4.8 第八层入口函数:底层hcd总入口函数
11.4.9 vxworks下usb设备操作请求内核传递过程总结
11.5 vxworks下usb设备应用层类驱动初始化详解
11.6 vxworks下usb控制器驱动初始化详解
11.7 vxworks下usb控制器驱动架构
11.8 编写vxworks下usb控制器驱动底层服务函数
11.8.1 编写usb操作请求总入口函数
11.8.2 编写usb控制器驱动中断处理函数
11.8.3 编写usb控制器驱动具体服务函数
11.9 本章小结
参考文献