前言
本书的来由
本书的前身是《嵌入式系统开发原理与实践》,该书自2005年问世以来,作为浙江大学嵌入式系统国家精品课程与众多兄弟院校相关课程的配套教材,已经被大量的学生和工程技术人员采用。从教学反馈意见来看,它对浙江大学嵌入式系统课程的教学和嵌入式系统知识在国内的普及起到了积极的作用。我们倾听了许多读者的意见,对他们提出的建议与宝贵的修改意见表示诚挚的谢意。
一晃5年过去了,嵌入式系统已成为IT行业中增长最快的领域之一,新平台和新应用不断涌现,智能手机、PDA、UMPC等旧时王谢堂前燕早已悄然飞入寻常百姓家。在这样的背景下,我们深感原教材的内容已不足以满足嵌入式系统课程的发展需要。在“国家十一五规划教材”相关精神指导下,为了反映近几年来嵌入式系统领域的迅速变化,适应新背景下嵌入式系统的课程教学,我们对原教材进行了大幅的修订,如对Linux内核的介绍由原来的2.4.18版本升级到2.6.30版本,更换了硬件实验平台,添加了对Android系统的介绍和应用等。此外,为了方便在实际教学中的使用,我们把全书的内容分为上下两篇,将原理和实验分成两部分。
本书的组织
本书在编写时,充分考虑了嵌入式开发过程中不同层次读者的要求,努力做到以下几点:
内容紧凑。使读者能掌握基本概念和基本理论,叙述上力求简明扼要,由浅入深。
面向实践。本书兼顾教学、科研和应用的需要,对于广大高等院校高年级本科学生和硕士生而言,是一本学习嵌入式系统开发的教科书; 对于从事嵌入式系统开发的工作者而言,是一本实用的参考书。
突出实验。书中几乎每章都有实验设计,而且绝大部分实验均系作者设计验证,具有参考价值。而且在每章之后都有相应的思考题或实验提示,供读者进一步深化研究。
全书分为原理和实验两部分。
原理部分:
第1章“嵌入式系统概述”。 介绍嵌入式系统的应用领域和发展方向,并为刚开始学习嵌入式系统的技术人员进行一个入门级的介绍,内容包括嵌入式微处理器和嵌入式操作系统,并在此基础上介绍嵌入式系统设计平台的选择和设计开发的主要过程等。
前言
嵌入式系统原理与设计
第2章“ARM处理器和架构”。 介绍ARM9处理器的架构及其内存管理。包括ARM公司介绍以及ARM指令集体系结构的版本发展,ARM微处理器系列介绍,ARM9处理器架构介绍和ARM9的内存管理与异常处理。
第3章“ARM9指令集和汇编”。 介绍ARM9体系结构的指令集与汇编代码的编写。包括RISC的基本知识,ARM指令寻址方式,ARM指令和Thumb指令介绍。
第4章“嵌入式Linux操作系统”。 介绍嵌入式Linux操作系统的基本知识。包括常见的嵌入式Linux操作系统介绍,嵌入式Linux的内存管理、进程管理和文件系统。
第5章“Boot Loader技术”。 介绍一些常见的Boot Loader。包括Boot Loader的基本概念,Boot Loader的典型结构以及UBoot和vivi的结构和代码分析。
第6章“ARMLinux内核”。 介绍基于ARM体系结构的Linux内核。包括ARMLinux内核和普通Linux内核的区别,ARMLinux的内存管理、中断管理、进程管理、模块机制,ARMLinux的系统调用与ARMLinux系统的启动和初始化等。
第7章“文件系统”。 介绍嵌入式文件系统的概况,分析了嵌入式文件系统框架,并对嵌入式Linux的典型根文件系统JFFS2进行深入剖析,最后介绍了制作根文件系统的方法。
第8章“设备驱动”。 介绍嵌入式Linux设备驱动程序的基本概念,如Linux内核设备模型、Linux同步机制、工作队列等,同时介绍了Linux设备驱动程序结构以及驱动程序的编写、测试、安装和加载方法。
第9章“开发环境和调试技术”。介绍交叉开发环境模式的主要原理和常用的调试技术,分别从宿主机和目标机两个方面简单介绍基础环境的搭建,同时介绍使用gdb工具来对嵌入式系统的应用程序和嵌入式Linux内核进行调试以及使用tcpdump等工具进行网络调试的方法。
第10章“字符设备和驱动程序设计”。介绍字符设备驱动的框架,以及编写简单字符设备驱动需要注意的地方。在此基础上,介绍了两种比较常用的字符设备驱动: GPIO驱动和I2C总线驱动。
第11章“块设备和驱动程序设计”。介绍块设备的特点,块设备驱动编写涉及的数据结构和相关函数,及块设备驱动的开发流程。并以MMC/SD卡驱动开发为例分析块设备的开发流程。
第12章“网络设备驱动程序开发”。介绍基础的以太网知识与其接口原理,解析网络设备驱动的数据结构,介绍网络设备驱动开发的详细流程,并以AT91SAM9G45网卡驱动开发为例分析网卡驱动程序的开发流程。
第13章“MiniGUI”。介绍国人自主开发的支持嵌入式的GUI系统MiniGUI,包括MiniGUI的原理、特点以及应用,MiniGUI的安装、配置以及使用与MiniGUI的基础编程要点。
第14章“Android 嵌入式系统及应用开发”。 介绍Android嵌入式系统相关的技术与应用,包括Android平台的基础技术以及内核心系统架构,Android开发环境的搭建方法与Android应用开发,应用开发扩展。
实验部分:
第1章“实验基础”。 介绍本书实验部分采用的开发板,包括处理器、硬件资源、软件资源等。
第2章“开发环境建立”。 介绍搭建宿主机和目标机实验环境,交叉编译和烧写Boot Loader的方法,以及minicom和TFTP服务、UBOOT等工具的使用方法。
第3章“内核和模块构建”。 介绍通过交叉编译工具编译针对Atmel AT91SAM9G45EKES实验平台的内核的方法,通过samba工具将内核烧到已经有Bootstrap和UBoot的开发板上,同时也介绍ARM平台内核模块的编写方法。
第4章“文件系统构建”。 介绍根文件系统在Linux系统中的作用,讲解根文件系统的制作过程与烧写开发板的流程。
第5章“调试技术演练”。 介绍使用gdb进行本地调试,使用gdbserver进行远程调试以及使用kgdb调试ARMLinux内核的方法。
第6章“字符设备驱动程序设计”。 以一个虚拟字符设备virtualcdev的设计为例介绍了简单的字符设备驱动程序的编写方法。
第7章“块设备驱动程序设计”。 以SD卡驱动程序为例介绍了块设备驱动程序开发的特点和流程。
第8章“网络设备驱动程序设计”。以定制可显示网络统计信息的ioctl命令为例介绍了EMAC控制器的编程要点和网卡驱动程序的开发流程。
第9章“MiniGUI实验设计”。以验证用户名和密码的登录系统框为例介绍了MiniGUI的静态框、按钮和编辑框控件等的使用方法。
第10章“Android实验设计”。以一个Android平台上的GPS导航应用为例介绍了Android平台上应用程序的开发方法和流程。
作者介绍
本书和它的前身相继得到了英蓓特公司、Atmel公司、Intel公司大学合作部等各方支持。本书由陈文智、王总辉统一编排整理定稿。在写作过程中参考了本书前身的不少内容,同时新增加了不少作者,其中朱晨杰参与编写第2、3、5章和实验1、实验2、实验10的部分内容; 倪华斐参与编写第6、7、8章和实验3、实验4的部分内容; 吕团团参与编写第1、9、10章和实验5、实验6、实验9的部分内容; 黄大鹏参与编写第4、11、12章和实验7、实验8、实验9的部分内容; 景栽君参与编写第13、14章的部分内容。写书过程中还得到杨建华先生的无私帮助。
声明和致谢
本书的编写工作在国家教委的指导下进行,得到了浙江大学计算机学院的大力支持,学院的同事们给予了真切的关心、指导和热情帮助,还得到英蓓特公司以及Atmel公司的领导和员工们的真诚帮助,在此向各级机关以及所有关心、支持本书出版工作的朋友表示衷心的感谢。
在编写本书的过程中,我们已尽全力保证本书内容特别是实验的正确性,但由于时间匆忙,且作者自身水平有限,仍然可能有错误存在。无论如何,请读者不吝赐教 ,以便我们在改版或再版的时候及时纠正补充。
再次感谢所有关心嵌入式事业、关心嵌入式教学、关心本书出版工作的朋友们!
作者
2011年1月于浙江大学 求是园