围绕目前最流行的32位ARM处理器和源码开放的Linux操作系统,讲述嵌入式系统的概念、软硬件组成、开发过程以及嵌入式Linux应用程序和驱动程序的开发设计方法。全书共9章,有从嵌入式系统基础到ARM体系结构、ARM核嵌入式系统芯片等涉及硬件的内容,也有从嵌入式Linux到应用程序、驱动程序、图形用户界面等软件内容。最后推出自主版权的轻量级图形用户界面lwGUI,给出嵌入式Linux的开发实例。
本书特点是内容经过实际教学使用,所带程序取材于学生的毕业设计和课程实验,不只针对某一款具体的ARM核芯片。适用于没有操作系统知识的单片机开发人员学习嵌入式系统,可作为嵌入式系统课程理论部分的教材和学习嵌入式Linux的参考用书。
第1章 嵌入式系统基础
1.1 嵌入式系统概述1
1.1.1 嵌入式系统的定义1
1.1.2 嵌入式系统组成2
1.1.3 嵌入式系统的特点4
1.1.4 嵌入式系统的应用5
1.1.5 实时系统6
1.2 嵌入式处理器8
1.2.1 嵌入式处理器的分类8
1.2.2 嵌入式微处理器8
1.2.3 微控制器9
1.2.4 DSP处理器10
1.2.5 片上系统10
1.2.6 典型的嵌入式处理器11
1.3 嵌入式操作系统13
1.3.1 操作系统的概念和分类13
1.3.2 实时操作系统17
1.3.3 常见的嵌入式操作系统19
1.4 实时操作系统的内核24
1.4.1 任务管理24
1.4.2 任务间的通信和同步30
1.4.3 存储器管理32
1.4.4 定时器和中断管理33
1.5 嵌入式技术发展现状及趋势34
习题35
第2章 嵌入式系统开发过程
2.1 嵌入式软件开发的特点36
2.2 嵌入式软件的开发流程38
2.3 嵌入式系统的调试44
2.4 板级支持包48
习题49
第3章 嵌入式Linux操作系统
3.1 Linux及其应用50
3.1.1 Linux与Unix和GNU50
3.1.2 Linux的特点55
3.1.3 Linux的应用及发展58
3.2 Linux内核62
3.2.1 Linux的内核特征62
3.2.2 进程管理66
3.2.3 存储管理73
3.2.4 文件系统管理75
3.2.5 设备管理81
3.2.6 嵌入式Linux的引导过程85
3.3 主流嵌入式Linux系统89
3.3.1 MontaVista Linux89
3.3.2 μClinux92
3.3.3 RTLinux95
3.3.4 RTAI97
3.4 嵌入式Linux的实时化改造98
习题104
第4章 ARM体系结构
4.1 ARM体系结构概述105
4.1.1 ARM体系结构的特点105
4.1.2 ARM处理器结构108
4.1.3 ARM处理器内核119
4.1.4 ARM处理器核125
4.2 ARM编程模型127
4.2.1 数据类型127
4.2.2 处理器模式128
4.2.3 处理器工作状态128
4.2.4 寄存器组织129
4.2.5 异常134
4.2.6 存储器和存储器映射I/O135
4.3 ARM基本寻址方式137
4.4 ARM指令集142
4.4.1 条件执行142
4.4.2 指令分类说明143
4.4.3 Thumb指令集与ARM指令集的区别163
4.4.4 Thumb指令分类说明165
4.5 汇编语言程序设计171
4.5.1 预定义的寄存器和协处理器名171
4.5.2 ARM汇编程序规范172
4.5.3 ARM汇编程序设计175
习题180
第5章 ARM核嵌入式系统芯片
5.1 ARM公司的合作伙伴181
5.2 Intel公司的XScale处理器182
5.3 Motorola公司的i.MX处理器185
5.4 TI公司的ARM和DSP双核芯片192
5.5 Cirrus Logic公司的微处理器195
5.6 Atmel公司的微控制器198
5.7 Samsung公司的微控制器202
5.8 Philips公司的微控制器208
第6章 嵌入式Linux应用程序开发
6.1 开发环境的建立211
6.1.1 安装开发环境211
6.1.2 配置开发环境212
6.2 Linux的使用213
6.2.1 Linux常用命令213
6.2.2 vi编辑器的使用221
6.3 make工具和gcc编译器223
6.3.1 应用程序的开发流程223
6.3.2 make管理项目简介224
6.3.3 gcc编译器的使用225
6.4 应用程序的调试227
6.4.1 与服务器建立链接227
6.4.2 编写应用程序228
6.4.3 调试应用程序231
第7章 嵌入式Linux驱动程序开发
7.1 嵌入式Linux的设备管理236
7.1.1 Linux驱动程序概念236
7.1.2 驱动程序结构237
7.1.3 Linux对中断的处理239
7.1.4 设备驱动的初始化240
7.2 设备驱动程序开发过程242
7.2.1 设备驱动程序开发流程242
7.2.2 模块化驱动程序设计243
7.2.3 设备驱动加到Linux内核中252
7.3 UART2串口驱动255
7.3.1 UART2相关寄存器255
7.3.2 UART2驱动程序设计256
7.3.3 串口通信实现261
7.4 LCD显示驱动262
7.4.1 LCD显示原理262
7.4.2 LCD驱动程序的设计268
7.4.3 LCD驱动设计步骤278
7.4.4 BMP文件显示282
7.5 键盘驱动285
7.5.1 键盘的硬件实现285
7.5.2 键盘驱动程序的实现288
7.6 Sitsang板的触摸屏驱动292
7.6.1 触摸屏及其相关的板级寄存器292
7.6.2 与触摸屏相关的同步串行控制器294
7.6.3 触摸屏的驱动程序297
7.6.4 触摸屏应用举例301
第8章 嵌入式Linux的GUI
8.1 嵌入式GUI303
8.2 嵌入式GUI的结构特征306
8.2.1 典型的MicroWindows306
8.2.2 面向实时的MiniGUI308
8.2.3 应用广泛的Qt/Embedded309
8.2.4 轻量级的lwGUI310
8.3 lwGUI系统的设计与实现312
8.3.1 图形抽象层和输入抽象层的设计与实现312
8.3.2 消息驱动机制的设计与实现328
8.3.3 窗口的设计与实现331
8.3.4 控件的设计与实现337
8.4 lwGUI系统的应用340
8.4.1 绘图板界面设计和功能设计340
8.4.2 绘图板应用的实现341
第9章 嵌入式Linux开发实例
9.1 嵌入式Internet345
9.2 基于Web的数据采集系统的实现346
9.2.1 ADC0809设备驱动程序的编写347
9.2.2 波形采集分析模块的实现350
9.2.3 Webserver的实现352
9.3 手写短信的红外通信传送358
9.3.1 Sitsang板的红外模块358
9.3.2 红外通信的实现363
9.3.3 基于MiniGUI的手写短信的红外传送372
9.4 基于xmodem协议的BMP文件传输及显示376
9.4.1 系统设计376
9.4.2 软件结构设计379
9.4.3 软件实现379
9.4.4 软件使用说明383
参考文献384
随着Internet的普及, 我们已进入了网络时代, 进入了后PC时代. 不仅PC机能上网, 各种各样的嵌入式设备都可以上网. 后PC时代出现了信息电器, 如掌上电脑. 个人数字助理PDA. 可视电话. 移动电话. TV机顶盒. 电视会议机和数码相机等嵌入式设备. 能上网的嵌入式设备需要加上TCP/IP网络协议. 由于8/16位单片机的速度不够快并且内存不够大, 较难满足嵌入式设备的上网要求. 随着集成电路的发展, 32位微处理器的价格不断下降, 已到了用户大量使用的时候. 32位RISC微处理器更是受到青睐, 领先的是ARM嵌入式微处理器系列. ARM公司在32位RISC处理器市场占有率超过了75%. ARM的成功之处在于它是知识产权供应商, 是设计公司, 其本身不生产芯片, 靠转让设计许可, 由合作伙伴公司来生产各具特色的芯片. ARM商业模式的强大之处在于其价格合理, 全世界范围有超过100个合作伙伴. ARM公司专注于设计, 其内核耗电少, 成本低, 功能强, 特有16/32位双指令集, 已成为移动通信. 手持计算. 多媒体数字消费等嵌入式解决方案的RISC标准.
过去大量应用的是8/16位单片机, 这只是嵌入式系统的初级阶段. 伴随着网络时代的来临, 出现了机顶盒. 路由器和调制解调器等Internet设备. 一句话, Internet的基础设施都是嵌入式系统, 而且在高端嵌入式应用中, 32位微处理器现在已很常见. 国内的IT产品的开发应该更新理念, 即逐步采用32位高性能的CPU,采用C等高级语言编程,采用操作系统及其平台进行开发,采用模块化方式从事项目开发. Linux从1991年问世到现在的短短十几年时间内, 已经发展成为功能强大. 设计完善的操作系统之一, 不仅可以与各种传统的商业操作系统分庭抗争, 在新兴的嵌入式系统领域内也获得了飞速发展. 嵌入式Linux以其可应用于多种硬件平台. 内核高效稳定. 源码开放. 软件丰富. 网络通信和文件管理机制完善等优良特性, 成为嵌入式系统领域中的一个研究热点. Linux源码开放, 内核可裁剪, 非常适用于嵌入式系统教学.
由全国大学生电子设计竞赛组委会主办, Intel公司协办的“全国大学生电子设计竞赛——嵌入式系统专题竞赛”进一步丰富了全国大学生电子设计竞赛的形式和内容, 推动了高校信息电子类专业的教学改革. 课程体系及实验室建设, 各高校纷纷开设嵌入式系统课程. 本书正是由开课后的讲稿整理而成, 全书共9章, 各章节内容安排如下:
第1章为嵌入式系统的基础知识, 讲述嵌入式系统概念. 嵌入式系统应用. 嵌入式系统硬件(嵌入式处理器)和嵌入式系统软件(嵌入式操作系统).
第2章介绍嵌入式系统开发的特点. 开发流程. 调试方法和板级支持包的功能.
第3章介绍嵌入式Linux及其应用. Linux的特点及其内核特征. 主流的嵌入式Linux和Linux的实时化改造.
第4章详细介绍ARM体系结构和编程模型, 分类给出ARM指令集和Thumb指令集, 最后介绍ARM汇编语言程序设计方法.
第5章给出ARM合作伙伴生产的ARM核嵌入式系统芯片的结构和功能特性.
第6章是嵌入式Linux应用程序的开发方法, 包括Linux的使用. gcc编译器的使用和应用程序的编写和调试.
第7章给出了UART串行口. LCD液晶显示. 键盘和触摸屏驱动程序的详细设计方法.
第8章比较现流行的3种图形用户界面, 给出自主版权的图形用户界面lwGUI.
第9章为嵌入式Linux开发实例, 有基于Web的数据采集系统. 手写短信的红外传送等.
本书内容是我们实际教学实践的总结, 现已面向北京理工大学信息学院本科生开设“嵌入式计算系统”课程, 面向全校研究生开设“单片机与嵌入式系统”选修课. 课程围绕ARM和Linux讲述嵌入式系统的应用程序和驱动程序设计方法. 值得欣慰的是, 所培养的学生可直接参与基于ARM的嵌入式Linux项目的开发. Intel公司大学计划和Freescale(原Motorola公司半导体部)大学计划提供的实验板本科生就可以使用. 回想接触嵌入式Linux之初, 几乎买遍了市面上的嵌入式Linux参考书, 也未找到一个模块化驱动程序的开发样例, 最后不得不求助在Freescale公司工作的学生. 我们从只会画个单色圆的实验设备到做起所有实验样例, 深深地感到只把Linux移植到具体的板子远远满足不了嵌入式Linux应用的要求, 驱动程序开发是嵌入式系统开发的关键. 基于服务器的实验方式让实验室的20套实验设备不能同时登陆上服务器, 最后我们自行设计单机方案, 配置Cygwin下的Linux开发环境, 设计简易Linux集成开发环境, 以解决Linux实验开设的难度. 嵌入式系统课程的开设得到了许多人的支持和帮助, 感谢Freescale公司大学计划部袁航以及工程师姜波. 袁华彬, Intel公司大学计划部朱文利. 王宇琪以及应用工程师刘文峰. 李眈, ARM中国公司总裁谭军博士. 感谢Atmel公司北京代表处的施膺. 叶勇建, ARM授权培训中心旋极公司的刘明, 普天慧信公司的章锋. 孙远鹏, 北京麦克泰软件技术公司的何小庆. 江文端给我们的学生提供了实践的机会.
本书是由北京理工大学和浙江大学的老师带领学生协作完成的. 北京理工大学的马忠梅. 康慨老师负责全书内容的组织, 许多内容取材于叶楠. 王炜. 杜慧和唐黎婷同学的毕业设计和课程实验. 齐尧. 方宁. 曾宏安. 李睿. 王霞. 靳军. 张博勋同学参与了ARM & Linux开发设计实践. 嵌入式Linux操作系统部分为浙江大学李善平老师和他的学生:陈鲁川. 高庆. 李程远. 刘文峰. 马天驰. 王焕龙. 王伟波. 解超. 谢科先的研究成果, Intel公司的刘文锋审阅了此部分内容. 目前国内缺少合适的嵌入式系统教材, 希望此书能对我国嵌入式系统教学与嵌入式系统应用和推广工作有所帮助, 也希望借此书感谢所有帮助过我们的人, 感谢国内把Linux用于嵌入式系统的先驱们, 在此谨向他们深表谢意.
作者
2004年7月